Dynamic Entity Inference for Developer Integration of Entity-Based External Functionality

ABSTRACT

A system includes a data store storing information identifying multiple functions and corresponding unique identifiers. Each of the functions corresponds to external functionality available from third party applications. The system receives a selection from an application developer of a function to supplement functionality of an application under development. The system provides a software object to the application developer for incorporation into a state of the application. The software object includes instructions for extracting text from the state and preparing a query wrapper including the corresponding unique identifier of the function and the extracted text. The instructions receive a result set, including an item that includes an identifier of a target application and an access mechanism for a specified state of the target application. The instructions display the item and, in response to user selection of the item, actuate the access mechanism to open the target application to the specified state.

CROSS-REFERENCE TO RELATED APPLICATIONS

This application is a continuation of U.S. patent application Ser. No. 14/683,020 filed on Apr. 9, 2015 (now U.S. Pat. No. 9,703,534), which claims the benefit of and U.S. Provisional Application No. 62/099,131 filed on Dec. 31, 2014 and U.S. Provisional Application No. 62/054,237 filed on Sep. 23, 2014. The entire disclosures of the applications referenced above are incorporated herein by reference.

FIELD

The present disclosure generally relates to development systems and methods for providing external functionality to applications.

BACKGROUND

In recent years, the use of Internet-connected devices such as smartphones has grown exponentially. The number and variety of available software applications for such devices has similarly grown by orders of magnitude. Presently, many diverse functions can be performed and many diverse sets of data can be analyzed on any given Internet-connected device. The applications that offer this functionality and data span business-oriented applications, educational applications, games, new applications, shopping applications, messaging applications, media streaming applications, social media applications, etc.

With such a wide array of available applications, many users of Internet-connected devices are not aware of the availability of applications that may perform functions and/or provide data of interest to the users. Even app developers, who generally focus on one segment of the market for applications, are unable to keep up to date on all of the applications that their users might find valuable in other segments.

The background description provided here is for the purpose of generally presenting the context of the disclosure. Work of the presently named inventors, to the extent it is described in this background section, as well as aspects of the description that may not otherwise qualify as prior art at the time of filing, are neither expressly nor impliedly admitted as prior art against the present disclosure.

SUMMARY

A system of one or more computing devices includes a user interface presented to a first application developer. The system includes a data store configured to store information identifying multiple functions and corresponding unique identifiers. Each of the functions corresponds to external functionality available from third party applications. The system includes an application functionality management module configured to receive a selection from the first application developer of a first function of the functions to supplement functionality of a first application under development by the first application developer. The system includes a code generation module configured to provide a first software object to the first application developer for incorporation into at least a first state of the first application. The first state includes a first user interface element associated with a first entity. The first software object includes instructions for, in response to user selection of the first user interface element, extracting text from the first state and preparing a query wrapper including (i) the corresponding unique identifier of the first function and (ii) the extracted text. The first software object includes instructions for transmitting the query wrapper to a search system. The first software object includes instructions for receiving a result set from the search system. The result set includes a multiple items. A first item of the items includes (i) an identifier of a target application and (ii) an access mechanism for a specified state of the target application. The first software object includes instructions for displaying the items. The first software object includes instructions for, in response to user selection of the first item, actuating the access mechanism to open the target application to the specified state.

In other features, the first software object includes instructions for, in response to the user selection of the first user interface element, extracting visual attributes of the text from the first state and including the extracted visual attributes of the text in the query wrapper. In other features, the visual attributes include a vertical location of portions of the text within the first state. In other features, the visual attributes include at least one of font size, font type, and font emphasis. In other features, the first software object includes instructions for, in response to the user selection of the first user interface element, extracting HTML (hypertext markup language) tags for the text from the first state and including the HTML tags of the text in the query wrapper. In other features, the HTML tags include HTML heading tags.

In other features, the first software object includes instructions for identifying statistically common terms from states of a same type as the first state. In other features, the first software object includes instructions for removing the statistically common terms from the extracted text before preparation of the query wrapper. In other features, the query wrapper includes information identifying the statistically common terms from the extracted text before preparation of the query wrapper. In other features, the access mechanism specifies downloading and installing the target application from a digital distribution platform prior to opening the target application.

In other features, the first item includes a second access mechanism. The second access mechanism specifies opening a web edition of the target application to the specified state. In other features, the access mechanism includes a script to navigate from a default state of the target application to the specified state of the target application. In other features, the user interface includes a web page. In other features, the system includes an application blocking management module configured to store a blacklist. The blacklist indicates applications and application states to exclude from the result set.

In other features, the code generation module is configured to incorporate the blacklist into the first software object, such that the first software object further includes instructions for at least one of removing application states matching the blacklist from the result set received from the search system, providing the blacklist to the search system as part of the query wrapper, and preventing display of application states from the result set that match the blacklist. In other features, the system includes a search service communication module configured to provide the blacklist to the search system so that the search system excludes from the result set any application states identified by the blacklist.

A method of operating one or more computing devices includes presenting a user interface to a first application developer. The method includes storing information identifying multiple functions and corresponding unique identifiers. Each of the functions corresponds to external functionality available from third party applications. The method includes receiving a selection from the first application developer of a first function of the functions to supplement functionality of a first application under development by the first application developer. The method includes providing a first software object to the first application developer for incorporation into at least a first state of the first application. The first state includes a first user interface element associated with a first entity. The first software object includes instructions for, in response to user selection of the first user interface element, extracting text from the first state and preparing a query wrapper including (i) the corresponding unique identifier of the first function and (ii) the extracted text. The first software object includes instructions for transmitting the query wrapper to a search system. The first software object includes instructions for receiving a result set from the search system. The result set includes multiple items, and wherein a first item of the items includes (i) an identifier of a target application and (ii) an access mechanism for a specified state of the target application. The first software object includes instructions for displaying the items. The first software object includes instructions for, in response to user selection of the first item, actuating the access mechanism to open the target application to the specified state.

In other features, the first software object includes instructions for, in response to the user selection of the first user interface element, extracting visual attributes of the text from the first state and including the extracted visual attributes of the text in the query wrapper. In other features, the visual attributes include a vertical location of portions of the text within the first state. In other features, the visual attributes include at least one of font size, font type, and font emphasis.

In other features, the first software object includes instructions for, in response to the user selection of the first user interface element, extracting HTML (hypertext markup language) tags for the text from the first state and including the HTML tags of the text in the query wrapper. In other features, the HTML tags include HTML heading tags. In other features, the first software object includes instructions for identifying statistically common terms from states of a same type as the first state. In other features, the first software object includes instructions for removing the statistically common terms from the extracted text before preparation of the query wrapper.

In other features, the query wrapper includes information identifying the statistically common terms from the extracted text before preparation of the query wrapper. In other features, the access mechanism specifies downloading and installing the target application from a digital distribution platform prior to opening the target application. In other features, the first item includes a second access mechanism. The second access mechanism specifies opening a web edition of the target application to the specified state. In other features, the access mechanism includes a script to navigate from a default state of the target application to the specified state of the target application. In other features, the user interface includes a web page.

In other features, the method includes managing a blacklist. The blacklist indicates applications and application states to exclude from the result set. In other features, the method includes incorporating the blacklist into the first software object, such that the first software object further includes instructions for at least one of removing application states matching the blacklist from the result set received from the search system, providing the blacklist to the search system as part of the query wrapper, and preventing display of application states from the result set that match the blacklist. In other features, the method includes providing the blacklist to the search system so that the search system excludes from the result set any application states identified by the blacklist.

Further areas of applicability of the present disclosure will become apparent from the detailed description, the claims and the drawings. The detailed description and specific examples are intended for purposes of illustration only and are not intended to limit the scope of the disclosure.

BRIEF DESCRIPTION OF THE DRAWINGS

The present disclosure will become more fully understood from the detailed description and the accompanying drawings.

FIG. 1A is a combined functional block diagram and graphical user interface example according to the principles of the present disclosure.

FIG. 1B is a graphical representation of an understanding of states as combinations of functions and entities.

FIG. 1C is a graphical representation of an example function ontology.

FIG. 1D is a simple graphical example of how application-specific entity information can be linked to a canonical entity.

FIG. 1E is a graphical example of conversion from functional URLs to access URLs.

FIG. 2 is a high level functional block diagram depicting how the principles of the present disclosure may be used in an application ecosystem.

FIG. 3A is a simplified graphical user interface of an example developer portal.

FIG. 3B is a simplified graphical user interface for another example developer portal.

FIGS. 4A-4B depict example contents of query wrappers sent to a search system.

FIGS. 5A-5B depict example contents of app results messages returned in response to a query wrapper.

FIG. 6 is a high level functional block diagram of an example developer portal.

FIG. 7 is a high level functional block diagram of an example advertiser portal.

FIG. 8 is a high level block diagram of an example search system and representative data sources mined by the search system.

FIG. 9A is a graphical representation of an example application record format.

FIG. 9B is a graphical representation of an example application record according to the format of FIG. 9A.

FIG. 10A is a graphical representation of an example access template record format.

FIG. 10B is a graphical representation of an example access template record according to the format of FIG. 10A.

FIG. 11A is a graphical representation of an example entity record format.

FIG. 11B is a graphical representation of an example entity record according to the format of FIG. 11A.

FIG. 11C is another graphical representation of an example entity record according to the format of FIG. 11A.

FIG. 12 is a functional block diagram of an example implementation of the search module of FIG. 8.

FIG. 13 is a functional block diagram of an example implementation of a software development kit library provided by the developer portal.

FIG. 14 is a flowchart of overall operation of the development system and user interaction.

FIG. 15 is a flowchart of example operation of the development portal.

FIG. 16 is a flowchart of example operation of the search system of FIG. 8.

FIG. 17 is a schematic view of an example computing device.

In the drawings, reference numbers may be reused to identify similar and/or identical elements.

DETAILED DESCRIPTION

A developer of an application (referred to interchangeably as an app) generally focuses on providing a good user experience for a limited number of functions. For example, an app developer may focus on providing accurate and intuitively-presented movie showtimes but may not invest effort in providing other related functionality, such as directions to movie theaters, dining options near the movie theaters, and/or reviews of the movies.

While an app developer generally would prefer that a user remain within their app, additional functionality, and therefore an improved user experience, may be provided by connecting to other apps. Connecting to other apps may provide a better user experience than attempting to replicate the functionality within the developer's own app. For example, if the developer is skilled at presenting movie showtimes and possesses valuable data and processing algorithms related to showtimes, the developer may not have expertise or unique content related to movie reviews. The developer can therefore rely on other apps whose focus is directed to movie reviews. For some functionality, such as GPS-based directions, a massive investment in mapping data and routing algorithms is required. As a result, few developers attempt to replicate mapping functionality within their app.

In order to access the functionality of another app, a developer may hard code a reference to that app when writing their code. In some circumstances, it is virtually guaranteed that an operating system will include a certain app. For example, a developer may reasonably expect that Google Maps will be available on an Android smartphone, although there are notable exceptions to this general rule, especially outside of the United States.

For most other categories of apps, such as movie review apps or restaurant review apps, there is no guarantee that any particular app will be present. Therefore, hard coding access to other specific apps is an exercise in guesswork. Also, the constant evolution of the app ecosystem means that the most popular, the most widely installed, and the most useful apps in any category may be different and may change with time.

For certain functions, a request may be passed to the operating system. For example, to map a location or to generate directions to a destination, a request can be passed to the operating system. The operating system may present the user with a list of installed apps to service that request. The operating system may allow the user to choose one of the apps as a default and, once a default is selected, the average user may never revisit that choice. Certain operating systems may not present a choice for certain requests, instead passing the request to a default app or service unless a specific configuration change is made by the user.

For all these reasons, the ability of an app developer to connect to other apps that would provide valuable functionality to the app developer's users is limited and difficult to implement. There is also no systematic way for developers to enter business relationships with each other. For example, an ad hoc arrangement may be possible where the developer of a movie reviews app compensates the developer of a movie showtimes app for each time that the movie reviews app is installed as a result of an advertisement or suggestion in the movie showtimes app.

The present disclosure presents a system where an app developer can quickly and easily add a wide variety of external functionality to an app. Instead of hard coding for specific apps, the present disclosure allows the developer to define a function of interest and, when a user expresses a desire to activate that function, a search system provides one or more apps that provide the desired functionality. These app results may include apps already installed and may also include apps not yet installed. For apps that are not yet installed, a mechanism may be provided for easy installation of the app.

For a streamlined user experience, the developer may link a user directly to a specific state within a specific app. For example, the developer of a movie showtimes app may include external functionality such as movie reviews. Instead of simply linking to the front page (or, default state or home state) of an app, the developer may link the user directly to the state within the selected app where reviews for the presently-displayed movie are shown.

The developer can identify a user's interest in both an entity and a function and provide direct links to app states that provide the specified function with respect to the specified entity. In other words, when the developer's app is displaying showtimes for a first movie (entity) and the user of the developer's app selects a reviews (function) button provided by the present disclosure, the results may include direct links to states of apps that show movie reviews (specified function) for the first movie (specified entity).

Further, a monetization system is integrated so that a third-party developer can promote their app and compensate the first app developer for activity driven by the first app developer. For example, compensation may be based on one or more of impressions (a user seeing the sponsored app), clicks (a user clicking, touching, or otherwise selecting the sponsored app being presented by the first app developer), cost per action or engagement (advertiser determines the action or engagement they are willing to pay for), and installs (when the sponsored app had not previously been installed and, as a result of the first app developer, the sponsored app being installed by a user). A portion of the revenue received from an advertising developer may be retained by the monetization system and the remainder is distributed to the first app developer.

A developer may decide to promote their app even if they do not take advantage of the external functionality provided by the present disclosure. Not every advertiser (or, sponsor) will be a developer. Because state-specific links are provided, an advertiser may desire to promote their product or business (such as a restaurant) as a sponsored state within another app (such as a restaurant reviews app).

The advertiser may commit to paying a specified amount when their business or product is one of the specified states. The advertiser may pay to promote their business or product, such as by making a visual enhancement or moving the result further up in the results list. In addition, as described in more detail below, the advertiser may specify keywords or competitor establishments or products that will lead to the advertiser's states being displayed.

To allow the first developer to harness the functionality of the rest of the app ecosystem with a minimal amount of extra coding, a developer portal is offered to developers. The developer portal offers pre-written code that a developer can incorporate into their app with little to no custom coding. The pre-written code may be offered as part of a software development kit (SDK), which may be implemented as a plug-in for an integrated development environment, or as one or more libraries or packages.

Included with the code (referred to below for simplicity as an SDK library) or provided separately are user interface elements, such as logos, fonts, and graphics. The first app developer may add a button to one of the states (or, screens) of the app and display a logo from the developer portal on the face of the button. The action performed by the button (querying the search system and displaying results) is simply provided by a call to the SDK library. The software development kit may even automate creation and placement of a button or other user interface element and may automatically associate the button with corresponding code, such as a routine or function contained within the SDK library.

The developer portal may allow the first developer to make choices relating to monetization, such as whether and how sponsored apps should be presented to a user, and how to be compensated for the display, access, or installation of sponsored apps. The first developer may also be able to select apps or classes of apps not to present to the user. For example, the developer may not want to present a third-party app that is a competitor of the first developer or that duplicates some of the functionality of the first developer's own app.

The settings chosen by the developer may be stored local to the developer and integrated into the app itself or may be stored by the developer portal and shared with the search system. As mentioned above, when an end user of the developer's app clicks on a button enabled by the developer portal, a query will be sent to a search system, which returns app results, including names, icons, and other metadata related to the apps, and may include a ranking of the relevance of the returned apps.

The returned results can be displayed to the user by code included within the libraries or packages provided by the developer portal. The results may be presented by themselves in a full screen or as only part of the screen real estate of the originating app. In some implementations, the developer is allowed to develop their own custom presentation layout for how the returned apps will be displayed. In other implementations, the display format may be fixed by the provider of the development portal. Although the provider of the development portal and the provider of the search system will be treated as a single entity below for ease of explanation, the developer portal and the search system may be operated by independent organizations.

In FIG. 1A, an unsophisticated Showtimes App 100 is shown running on a user device, such as smartphone 104. A first state of the Showtimes App 100 is shown at 100-1, and the corresponding reference numeral for the smartphone 104 is 104-1. The Showtimes App 100-1 includes app- or developer-specific branding (sometimes referred to as “chrome”), such as a title 108-1. In the simple interface of the Showtimes App 100-1, a search bar 112 identifies the movie for which showtimes are being displayed (a fictional “The Hobbit XIII”) and allows the user to search for a different movie. The Showtimes App 100 may show theaters around the present location of the smartphone 104 but may allow for the user to change the specified location using a “Change Location” button 116.

The Showtimes App 100-1 lists a number of theaters at which the selected movie is playing and the corresponding showtimes at those theaters. Additional functionality not previously built into the Showtimes App 100 may include restaurants within the same vicinity as the movie theaters, directions to one of the movie theaters, reviews of the movie, purchase mechanisms for movie tickets, etc.

As described in more detail below, using the developer portal, the developer of the Showtimes App 100 can include buttons such as a “Reviews” button 120 and a “Find Food” button 124. In addition, a “Tickets” button 128-1 and a “Directions” button 130-1 may be associated with a first theatre (“AMC Plaza 20”). “Tickets” buttons 128 and “Directions” buttons 130 may be associated with each of the theatres.

The buttons 120 and 124 may be labeled with an icon or logo of the supplier of the previously-mentioned developer portal or the operator of a search system 132. For example only, a stylized “Q” may be displayed, which is associated with Quixey, Inc. of Mountain View, Calif.

When a user of the Showtimes App 100 selects (such as by tapping their finger) the “Reviews” button 120, a query wrapper 136 is sent to the search system 132. Example contents of the query wrapper 136 are described in more detail below, but may include a context object 136-1 specifying the entity, such as “The Hobbit XIII,” and a query object 136-2, such as a text or numeric identifier of a Movie Reviews function.

The search system 132, as described in more detail below, identifies entities relevant to the context object 136-1 where those entities can be used by functions specified by the query object 136-2. For example, entities having text (such as title or description) corresponding to “The Hobbit XIII” but that are not relevant to movie review functionality (for example, a graphic novel) should not be returned as not meeting the specified function. The search system 132 returns app state results 140 to the smartphone 104, with example contents of the app state results 140 being described in more detail below.

A graphical presentation of the app state results 140 are displayed in a state 100-2 of the Showtimes App 100, and the corresponding reference numeral for the smartphone 104 is 104-2. The Showtimes App 100-2 may also retain its own branding, such as the title, indicated at 108-2. The graphical results may be displayed in a portion of the Showtimes App 100, and the graphical results may appear to hover (not shown) over native content of the Showtimes App 100, such as by restricting the graphical results to a portion of the Showtimes App 100, leaving a border of native content of the Showtimes App 100.

In addition, the graphical results may be shown on a semi-transparent background so that the native content of the Showtimes App 100 (movie showtimes) remains at least faintly visible. In various implementations, the results may slide in from one side or from the top or bottom, suggesting to the user that the results can be dismissed by swiping in an opposite direction.

The graphical results may be presented under a header 152. In this example, each of the results corresponds to the entity “The Hobbit XIII” shown at 156. A first result corresponds to a FANDANGO application 160. Associated with the Fandango application 160 is an icon 164, a rating 168 for “The Hobbit XIII” according to the Fandango application, and a metric 172, such as the number of installs of the corresponding app. When the user clicks within the rounded rectangle surrounding the Fandango application 160, the SDK library within the Showtimes App 100 will transition to the “Fandango” application and specifically to a state showing movie reviews for “The Hobbit XIII.” Another result has been sponsored, as indicated by a text tag 176 as well as shading. The sponsored result, the NETFLIX app, is not yet installed and therefore has an indication (in this case, an icon 180) that the application must first be downloaded and installed.

Alternatively, an “(Installed)” parenthetical could be used with apps, such as Fandango, that are already installed on the smartphone 104. Other text, such as “Open,” may instead be used when the app is already installed. Apps not yet installed may be labelled with “Download” or “Install” labels. Equivalently, icons or other visual cues may distinguish between apps that can simply be opened (including native apps and, as described in more detail below, web apps) or that first need to be installed.

Selecting the Netflix result may trigger the opening of a digital distribution platform in either a web browser or a dedicated app, such as the app available from the Google PLAY STORE digital distribution platform. The identity of the app to be downloaded is provided to the digital distribution platform so that the user is immediately presented with the ability to download the desired app. In some implementations, the download may begin immediately, and the user may be given the choice of approving installation. Upon completion of installation, the SDK library may automatically navigate to the desired state of the Netflix” app—that is, the “The Hobbit XIII” state.

Other data shown for each result may include snippets of text (such as the first few words of a review), an image (such as a screenshot of the state), a reliability metric (such as number of user reviews), a freshness metric (such as most recent observed update to the state), etc.

Sponsored apps can be highlighted in any way that is perceptible to the user, including increasing the font size, using different colors, adding a graphic or text sponsorship label, etc. In some implementations, the sponsorship may not be displayed to the user, and may simply cause the sponsored app to be moved up in the rankings. Sponsored apps may be grouped together and labeled with a “Sponsored Apps” title (not shown). In various implementations, the sponsored apps may be shown at the top of the list, at the bottom of the list, in the middle or the list, or interspersed throughout the list.

As described in more detail below, apps may also be accessed through intermediary software, such as a web browser. These apps, such as HTML5 apps, may be shown with an open action and may be identified as being a web-based app using an icon or text. For example, a globe icon is shown at 188 to indicate that the IMDB MOVIES & TV app will be opened in a web browser. As another example, a text label (not shown) could be included, such as “Open In Browser” or “Open On The Web.”

In FIG. 1B, examples are presented of how functions and entities are combined to arrive at app states. A function of “Buy Tickets” 204-1 and an entity of “The Dark Knight Rises” 204-2 combine to create a state 204-3 for buying tickets to “The Dark Knight Rises.” Similarly, a function of “Get Ride” 208-1 and a location entity (such as WiFi-assisted GPS) of the device 208-2 combine to create a state 208-3 for getting ride/taxi from present location. A function “Find Flight” 212-1 combines with an entity “LAX” (Los Angeles Airport) 212-2 and an entity “SFO” (San Francisco Airport) 212-3 to create a state 212-4 for finding a flight from LAX to SFO. Note that the entities 212-2 and 212-3 in the final example may serve as either departure location or arrival location. If there is no indication of which entity is which, an alternative state (finding a flight from SFO to LAX) is possible.

In FIG. 1C, a function ontology 220 includes a number of branch nodes (such as video 224-1 and restaurants 224-2), which may represent different industry verticals. The function ontology 220 includes leaf nodes (such as buy tickets 228-1, rent video 228-2, reviews 228-3, and showtimes 228-4) that each correspond to a particular function offered by one or more apps. Leaf nodes underneath the restaurants branch node 224-2 include reviews 232-1, business info (such as hours and address) 232-2, and reservations 232-3. Further branch nodes may be specified, such as a buy branch node 236 under which leaf nodes download 240-1 and stream 240-2 are specified. The rent leaf node 228-2 could be similarly expanded.

Each of the functions of the function ontology 220 may be accomplished by a number of different apps. For example, video reviews 228-3 are available from, among many other sources, an IMDB app, a NETFLIX app, and a Google PLAY app. Access templates may be determined for the functions of each app. An information triplet—the app, the function the app is to perform, and the entity for which the function will be performed—specifies a state.

When this triplet is formatted as a URL (uniform resource locator), the URL may be termed a functional URL. Functional URLs may be used with a name space “func://” to differentiate the functional URL from a standard web URL in the “http://” name space. Action templates define what types and number of entities are required to specify a functional URL for a given app function.

Examples of access templates for video reviews 228-3 are shown at 244-1, 244-2, 244-3, and 244-4. The access template 244-1 for IMDb includes the name space, “func://”, an indication of the app, “www.imdb.com”, a separator forward slash, an indication of the function to be performed, “movie reviews”, another separator forward slash, and then an indicator of an entity type, which is a movie_id.

Therefore, in order to use the access template 244-1, a movie entity must be identified. Further, as described in more detail below, the identified movie entity must be applicable to IMDb. In general terms, this means that if the movie is not present in the IMDb app, the access template 244-1 will be irrelevant. In technical terms, when attempting to create a state from the access template 244-1, there will be no IMDb-specific information for that entity with which to populate the access template 244-1.

In FIG. 1D, a brief example of how a general (or canonical) entity relates to app-specific information. App-specific entities 248-1 and 248-2 are present in a data store of the search provider. They may be obtained from various data services as described in more detail below. The app-specific entity 248-1 for IMDb includes a hexadecimal identification code (a fictitious ID is shown as an example only) and the title used by IMDb. In addition, other information, such as reviews, actors, producers, etc., may be stored.

The app-specific entity 248-2 for Fandango includes an alphanumeric ID specific to Fandango (a fictitious ID is shown as an example only), and includes the title used by Fandango for the movie. Additional information may also be stored.

A canonical entity 252 includes a canonical title, which in this particular case is the same as the titles for the app-specific entities 248-1 and 248-2 differ. If the titles in the app-specific entities 248-1 and 248-2, one would have to be chosen as the canonical title; or, a canonical title that differed from both may be used.

A canonical year is included, which may be the same as year information stored in the app-specific entities 248-1 and 248-2. The canonical entity 252 includes links to the app-specific entities 248-1 and 248-2. These links may be in the form of unique key values, such as might be used in a relational database. Additionally or alternatively, specific IDs that match the IDs used in the app-specific entities 248-1 and 248-2 may be used to link the canonical entity 252 to the app-specific entities 248-1 and 248-2.

The canonical entity 252 may also include various metrics, such as a popularity score. This popularity score may be based on how popular the described entity is from the various data sources relied upon and may include information about how frequently the entity is selected when presented to the user. The popularity may be normalized to other entities of the same type, in the same genre, etc.

In FIG. 1E, an access URL mapping module 260 converts the functional URLs 244 into corresponding access URLs 264-1, 264-2, 264-3, and 264-4, respectively. The mapping is performed using access templates, which take specific information and insert it into a parameterized URL. Access templates are stored in an access templates data store 268. An entity data store 272 stores information about entities, both canonical and app-specific.

As an example only, if the “movie_id” of the functional URLs 244 was a value corresponding to “Django Unchanged,” a 2012 film, the access URL mapping module 260 would produce the access URLs 264 shown in FIG. 1E. Note that for the access URL 264-4, two app-specific values are retrieved from the entity data store 272: a Google-specific movie name and a Google-specific movie ID. Similar to the association shown in FIG. 1D, all of the app-specific data used to create the access URLs 264 is linked to a single “Django Unchained” canonical entity. In other implementations, the canonical entity may simply have fields for app-specific data, as opposed to links to distinct app-specific entities.

In FIG. 2, a high-level overview of the overall system is shown. An app developer 300 interacts with a developer portal 304 when developing an app (referred to as App A). The app developer 300 identifies what external functionality is desired for App A and provides this information to the developer portal 304. The app developer 300 may also specify limitations, such as apps that the app developer 300 does not want to have shown to a user of App A.

The developer portal 304 provides code for App A that allows external functionality to be implemented into App A. A button associated with this external functionality will cause App A to query a search system 132. The developer portal 304 may provide parameters to the search system 132 based on the decisions made by the app developer 300. In some implementations, some or all of the decisions that the app developer 300 makes are incorporated into the code provided by the developer portal 304 to the app developer 300.

In other words, some data about App A may be known beforehand by the search system 132, while other data will be provided directly from App A, such as via the query wrapper. As one example, the app developer 300 may decide that App M should not be shown to users of App A and adds App M to a blacklist. The developer portal 304 may provide the blacklist to the search system 132 so that the search system 132 will return apps only if those apps are not in the blacklist. Alternatively, the code provided by the developer portal 304, and that is integrated into App A, may provide the blacklist to the search system 132 while App A is running. In other implementations, App A may not provide any information about a blacklist to the search system 132 and instead filter the results returned by the search system 132 to remove apps corresponding to the blacklist.

Once the app developer 300 receives the code from the developer portal 304, the app developer 300 finalizes App A (which may include compiling and linking) and provides App A to a digital distribution platform 308. One example of the digital distribution platform 308 is the PLAY digital distribution platform by Google, Inc.

The developer portal 304 may provide code to the app developer 300 in a variety of forms. The code may be provided in plain text that can be copied and pasted into the coding platform used by the app developer 300. The developer portal 304 may instead provide some or all of the code in the form of a library (the SDK library), which may be precompiled object code.

The SDK library may be associated with an API (Application Programming Interface), and a definition of the API may be provided to the app developer 300. In some implementations, the app developer 300 may use a graphical user interface on the developer portal 304 (such as a website) to automatically generate appropriate API calls. These API calls can be included in App A during its development. The developer portal 304 may provide visual user interface elements, such as buttons, for use by the app developer 300.

Choices made by the app developer 300 during development of App A may be fixed into the code received from the developer portal 304. Alternatively, the app developer 300 may be able to modify certain aspects of the code, such as by supplementing a blacklist. Once App A is provided to the digital distribution platform 308, the code in App A may be relatively fixed. Changes to App A may require a version update at the digital distribution platform 308. As a result, post-distribution changes, such as updating of blacklists, may instead be done using the developer portal 304 and communicated to the search system 132.

When a user of the smartphone 104 installs and opens App A from the digital distribution platform 308, an external functionality button 312 will be present on some or all of the states of App A. The term “state” may refer to a screen of App A. If App A is a movie showtimes app, each state may correspond to the showtimes of a particular movie in a particular location. The external functionality button 312 may be present in a template that applies across all of the states of App A that show movie showtimes.

App A may have additional states, such as a movie listing that lists all currently playing movies according to geographical area, a theater listing that lists all theaters within the geographical area, etc. The external functionality button 312 may be present in those states or may be absent. Depending on the choices made by the app developer 300, other external functionality buttons (not shown) may be present in those other states.

The app developer 300 may specify a template, or layout, for each type of state of App A. For example, a first template may include two external functionality buttons, such as are shown in FIG. 1A (“Find Food” and “Directions”), which are populated into any corresponding state of App A. For example, any state of App A that displays showtimes may be formatted using the first template. App A may include states, such as a form for providing feedback that a particular show time is wrong or that a movie theater is absent. These states may be created using a template that does not include the external functionality button 312.

When the user of the smartphone 104 actuates the external functionality button 312, such as by touching the external functionality button 312, a query wrapper is sent to the search system 132. The code provided by the developer portal 304 may receive a parameter corresponding to the present state of App A. This parameter allows the query wrapper to specify a desired specific state in any relevant apps. For example, the developer of a movie showtimes app may choose to pass the name of a movie whose showtimes are presently being displayed to be part of the query wrapper for a movie reviews function. For a directions function, the developer may choose to pass a name and/or address of a movie theatre to be part of the query wrapper. For a ticket-purchasing function, the developer may choose to pass a name of the movie theatre to be part of the query wrapper.

The search system 132 processes the query wrapper, as described in more detail below, and returns a set of suitable apps to the smartphone 104. The suitable apps may be displayed within App A using code provided by the developer portal 304. In other implementations, the smartphone 104 may include an app developed by an operator of the search system 132. This search system app may display the suitable apps to the user of the smartphone 104.

An advertiser portal 316 receives advertising requests from an advertiser 320. The advertiser portal 316 may provide app sponsorship opportunities to organizations that don't have accounts on the developer portal 304. In various implementations, the advertiser portal 316 may replace the sponsorship functionality of the developer portal 304 such that developers who want to promote their apps use the advertiser portal 316 instead of the developer portal 304.

The advertiser portal 316 also provides an ability for the advertiser 320 to promote an entity associated with a product or service of interest to the advertiser 320. For example, the advertiser 320 may set keywords so that DENNY'S restaurant entities will be promoted in general. The advertiser 320 may also specify specific states, such as the states in the YELP app for Denny's entities, for promotion.

The advertiser 320 may also specify coupons that are available within an app. For example, an advertiser 320 may contract with Yelp (either directly or through an advertising network) to cause a coupon to be displayed within Yelp for Denny's restaurants. The advertiser 320 may then notify the advertiser portal 316 of the coupon so that result states in Yelp for Denny's can be shown with a coupon label. The existence of a coupon may be used as a factor by the search system 132 when scoring app states, with app states having coupons receiving a higher score.

Although FIG. 2 shows the effective flow of data between the components, in reality, the app developer 300, the developer portal 304, the digital distribution platform 308, the smartphone 104, the search system 132, the advertiser portal 316, and the advertiser 320 may communicate through a network 324. The network 324 may encompass local area networks, mobile phone provider's proprietary networks, and a distributed communications network, such as the Internet.

In FIG. 3A, a simplified user interface for an example implementation of the developer portal 304 is shown. The app developer (referred to as App Developer A) logs into the developer portal 304, which may be a website. Because of the sensitivity of app and monetization information, a two-factor authentication protocol may be required for app developers.

App Developer A creates one or more app profiles in the developer portal 304. Settings and data related to App A are shown at 404, and the app developer 300 may be able to cycle through other apps using “Previous” and “Next” user interface elements 406-1 and 406-2. Global policies are shown at 408 and include monetization preferences 412 and a blocked list 416 that apply to all of the developer's apps.

The monetization preferences 412 may include payment details for App Developer A, including how App Developer A can provide money to the developer portal 304 to obtain advertising as well as how the developer portal 304 can pay App Developer A for sponsored links being shown in the apps associated with App Developer A. For example only, the monetization preferences 412 may include billing addresses and account information for digital funds processing systems such as PAYPAL. In implementations where use of the developer portal 304 is not free, the monetization preferences 412 may also include options for beginning or ending service, and options for changing the payment schedule (for example, from monthly to annually).

The blocked list 416 includes a list of apps, app states, and/or entities that App Developer A does not want to have displayed in any of the apps for App Developer A. A “Choose” button 420 allows App Developer A to choose, from a list, which apps should be blocked. This list (not shown) may be searched, filtered, etc. Explicitly chosen apps for a blacklist are shown at 424. In addition, a “Manage Patterns” button 428 may allow App Developer A to specify wildcard patterns that match apps not to be presented to users of App Developer A's apps. For example, if App Developer A works for SAM'S CLUB WAREHOUSE CENTERS discount retailer, one specified pattern may correspond to the COSTCO discount retailer. The Costco pattern may include wildcards before and after “Costco” so that any Costco app is identified.

Although this discussion focuses on the titles of apps, blacklists may also be specified based on words in the description of an app, the name of the developer of the app, etc. Further, specific entities, such as addresses and names of competitors may be blacklisted. In addition, general blacklist criteria may specify that, for example, an app downloaded fewer than a specified number of times should not be shown to a user. The manage patterns button 428 may allow App Developer A to specify patterns using wildcards, regular expressions, etc. A first specified pattern followed by two apps that match that pattern are shown at 432. Similarly, a second pattern and four matching apps are shown at 436.

In various other implementations, App Developer A may specify a whitelist of apps to display, where any apps not included in the whitelist will not be presented to a user of App A. In other implementations, App Developer A may specify a preference list including apps that are preferred: these apps are then emphasized (such as by moving higher on the screen) when present in the result set. The preference list may be an ordered structure, such that an app appearing higher in the preference list is to be given greater precedence than an app appearing lower in the preference list.

In the app specific settings 404, a list of functions 440 identifies what external functionality will be available to App A. For example, the listed functions within 440 may correspond to finding food, finding driving directions, and finding movie reviews. An “Add” button 444 allows a new function to be specified using a new/edit function interface 448. A list of available functions 452 may include functions of interest identified by the developer portal 304 for various verticals, such as movies, dining, travel, sports, etc. A filter interface 456 allows the available functions to be filtered, such as by name, for easier identification of the desired function.

The available functions 452 are the leaf nodes of the function ontology (such as the function ontology 220 of FIG. 1C). While shown as a list, the available functions 452 may be presented in a hierarchical outline format, or in a tree format (such as is shown in FIG. 1C). Sub-branches may collapse into a branch node (that is, disappear from view) until selection so that a full ontology can be displayed on a single viewing screen.

A user interface options portion 464 allows App Developer A to specify how results for the selected function should be displayed. The options may include specifying how many results are to be shown, what associated information (such as starred ratings) should be shown, how the button corresponding to the function should be displayed, and how sponsored apps will be identified. As one example, App Developer A may specify how many sponsored apps or entities should be shown in a results set. In another example, App Developer A may be able to specify that only already-installed apps should be shown to the user. App Developer A may also specify, such as by using CSS (Cascading Style Sheets), the graphical presentation of search results.

For example, in the user interface options portion 464, App Developer A may specify a particular shape and size for a button, and may identify whether logos or texts identifying the developer portal 304 (such as a logo of a provider of the developer portal 304) should be shown on the button. App Developer A may be able to specify in the user interface options portion 464 that App Developer A will create the button or other user interface element and that therefore the user interface element does not need to be provided by the developer portal 304. Instead, the developer portal 304 can provide the code for searching for the function, which will be called by whatever user interface element App Developer A creates.

A function-specific blocked list 468 allows App Developer A to block apps and/or states specifically per function. For example, App Developer A may believe that a particular popular app does not provide a good user experience for the particular function at issue. This app can therefore be added to the function-specific blocked list 468.

A checkbox 470 indicates an intent of App Developer A to supply state-specific data. For example, when a function such as movie reviews is chosen, App Developer A may check the checkbox 470 to indicate that information related to a movie entity will be included in the query wrapper for “Movie Reviews.”

A set of radio buttons 472 allows App Developer A to choose whether the entity (such as the movie) is identified to the search system by name (the name of the movie, for example), by number, or whether the identity of the entity should be inferred. When providing a name, the developer portal 304 provides App Developer A with an API call that includes a unique identifier of the desired function, as well as a parameter for providing the name of the currently displayed movie.

The set of radio buttons 472 also includes the option to identify the entity by a prearranged ID. For this option, an entity mapping link 474 is available. In order to send an entity ID to the search system, the search system needs to understand what that entity ID means. For the convenience of the search system, App Developer A may retrieve all of the relevant entities from the search system and map the search system IDs to the internal entities of the App A. In this way, App Developer A can simply send the search system ID directly to the search system to uniquely specify the correct entity.

To reduce the burden on App Developer A of storing the search system's IDs, a mapping from entity IDs used by App A to entity IDs used by the search system can be created. Then App Developer A uses the internal entity IDs from App A, relying on the mapping to convert from the internal App A entity ID to the search system entity ID. This mapping may be stored within App A, or may be stored on the search system. For this option of the set of radio buttons 472, the developer portal 304 may provide an API call that includes the selected function as well as a parameter for an entity ID.

Another option presented by the set of radio buttons 472 is for the search system to infer an entity. To reduce the burden on App Developer A still further, App Developer A can simply place a button having the desired function onto every state of interest to App Developer A. Based on the text displayed in that state, the search system can infer what entity the function should be performed on. For example, a user interface element created according to this option will, when selected, execute code that scrapes the text and potential image data from the displayed state. This data, which may first be parsed or analyzed within the app, is transmitted to the search system. The search system analyzes the data and infers the correct entity. Referring back to FIG. 1A, the fact that the text “The Hobbit XIII” appears near the top of the screen and is the only recognizable movie name would lead to the inference that the request for movie reviews was intended by the user to be made with respect to the entity “The Hobbit XIII.”

When a function has been specified and/or edited, a “Done” button 476 can be actuated by App Developer A. An app-specific blocked list 478 allows App Developer A to block apps and/or states for all functions specified for App A. For example, App Developer A may develop apps for a number of small companies. Each app may therefore correspond to a different company. Each company may have their own list of competitors that may be added to the app-specific blocked list 478.

A “Download” button 480 allows App Developer A to obtain the code necessary to access the specified functions in the list of functions 440. As discussed above, a customized SDK library may be downloaded in response to the “Download” button 480. Alternatively, a predetermined SDK library may be downloaded that forms query wrappers and presents search results. This SDK library may be accessed using an API; API calls corresponding to the list of functions 440 may be downloaded for use in the programming environment of App Developer A.

A software development kit (SDK) may be downloaded using the “Download” button 480. The SDK may integrate with the programming environment of App Developer A, such as an integrated development environment. The SDK may duplicate or replace some of the features of the developer portal 304, in one example resulting in FIG. 3B. The SDK may provide for one-click addition of a specified function to a template or layout that App Developer A is creating.

With that single click, the SDK may place a user interface element, such as a button, into a graphical form editor. The SDK may also create an appropriate API call to the SDK library that can send a query wrapper and receive app results. The SDK may also populate an entire new screen (state) of the application with graphical elements used for displaying app results. In other implementations, the SDK may insert API calls that will allow App Developer A to query the results returned and format and display the results in whatever manner App Developer A chooses.

The settings specified in the developer portal 304 may be reflected in the parameters of the API calls, the downloaded code, a custom SDK library, etc., provided by the developer portal 304. This code may then be integrated into App A and the code integrated into App A is solely responsible for providing relevant information to the search system 132. Alternatively, some data may be communicated by the developer portal 304 to the search system 132. For example, the global policies 408 may be provided to the search system 132. Then, whenever an app corresponding to App Developer A queries the search system 132, the search system 132 is aware of, and operates according to, the global policies 408 set by App Developer A.

App-specific policies may also be communicated to the search system 132. That way, when the search system 132 receives a query from App A, the search system 132 is aware of some or all of the parameters specified in the developer portal 304 for App A. App Developer A may make changes in the developer portal 304 subsequent to distributing App A. These changes may be sent to the search system 132 to allow for the behavior of external functionality buttons to be adapted over time without having to create a new version of App A in the digital distribution platform 308.

As mentioned above, some parameters may never be communicated to the search system 132 in some implementations. For example, certain blocked apps may be filtered out from received results within App A itself as opposed to being filtered out by the search system 132. This filtering may be performed by code provided by the developer portal 304 and customized by, for example, the blocked list 416. Alternatively, the developer portal 304 may provide instructions to App Developer A on how to perform the filtering using appropriate API calls to functions or libraries provided by the developer portal 304.

In FIG. 3B, one example of an implementation of the developer portal 304 for use with a software development kit is shown. Global policies 408 may still be specified using the developer portal 304 of FIG. 3B. However, app-specific or function-specific parameters may be configured using the software development kit, which is downloaded at 490. Instructions for using the software development kit may be displayed at 494. Additional instructions and/or wizards, walkthroughs, and tutorials may be contained within the software development kit. The global policies 408 may be communicated to the search system 132, while app-specific parameters are encoded into whatever app App Developer A creates using the downloaded software development kit.

FIGS. 4A-4B show example contents of a query wrapper. In FIG. 4A, a query wrapper 504 is encrypted with a public key of the search system 132. This public key may be provided to the App Developer using the developer portal 304 as part of the code that generates the query wrapper 504. By encrypting the query wrapper with the search system's public key, only the search system, which is in possession of the corresponding private key, can decrypt the query wrapper 504. This prevents any man-in-the-middle eavesdropping of queries performed by the user.

A query wrapper 504 includes a query object 504-1, which uniquely identifies a function from a function ontology (such as the function ontology 220). A function identifier may be a binary or alphanumeric value, which may be fixed after selection of the corresponding function within the developer portal 304. A context object 504-2 includes an entity identifier. The entity identifier may include a plaintext name of an entity or may include an ID whose significance is prearranged between the developer and the search system 132.

At 504-3, a representation of installed apps is provided. For example, an exhaustive listing of all installed apps including titles and version numbers may be included. In some implementations, a bit field may be specified for the one-hundred most popular apps. In other words, one hundred binary digits correspond to whether each of those apps is installed, with a zero indicating that the app is not installed and a one indicating that the app is installed. To allow for this shortened bit field format, the set of apps must be pre-arranged. Although one hundred is used as an example, for efficient storage a power of two (such as 128) may be used.

Another mechanism for indicating installed apps using a limited number of bits is a Bloom filter. The Bloom filter specifies whether an app from a predefined set of apps is possibly installed on the device or whether the app is definitely not installed. To achieve storage compression, the output of a Bloom filter does not definitively state that a certain app is present; the Bloom filter output only definitively states whether certain apps are not present.

An installed accounts data structure 504-4 may report which accounts are present on the user device, and any relevant details about those accounts that might be available. This may impact how relevant a result is. For example, if the user has expressed an interest in streaming a movie, but their account on a particular service does not allow streaming of that movie, the corresponding state may receive a reduced score.

At 504-5, a blacklist is specified. This blacklist may supplement a blacklist already present in the search system 132 or may be a stand-alone blacklist. The blacklist may list apps not to return based on unique identifiers of those apps, which are known beforehand by the search system 132. The blacklist 504-5 may also list states and entities not to include in results.

At 504-6, device info of the device transmitting the query wrapper 504 may be included. This information may include the operating system and the operating system version number, geolocation data for the device, an identity of the app sending the query wrapper 504, an identity of the app developer of the app, screen resolution, portrait/landscape orientation, and sensor capability (precision of accelerometer, presence of heart rate sensor, etc.). The app or app developer identities may be used by the search system 132 to apply pre-arranged parameters provided by the developer portal 304, such as a blacklist. The app identity may also be used by the search system 132 to remove that app and related states from the results—in other words, to avoid returning a result that points back to the very same app that sent the query wrapper 504.

In FIG. 4B, a query wrapper 508 includes similar fields as the query wrapper 504. The exceptions depicted are with respect to a context object 508-2 and statistical text information 508-3. The context object 508-2 is used when an entity is not being specifically identified by the app developer. Therefore, the search system infers the entity of interest from the context of the state that triggered generation of the query wrapper 508.

The context object 508-2 includes text from the state as well as text attributes. In addition, the context object 508-2 may include other visual features, such as tables and images. The statistical text information 508-3 may include information gathered by the SDK library about the relative frequency of certain terms and phrases. Terms or phrases that appear repeatedly or even universally across all states of a certain type indicate that that text should not be relied upon to provide identification of the correct entity. As described below, when the context object 508-2 includes all of the state text, this collection and statistical analysis may be performed at the search system, which may reduce processing overhead on the user device, which may be constrained by battery capacity.

FIGS. 5A-5B depict example formats for app state results. The app state results may be provided as a file over any suitable protocol, such as HTTP (hypertext transfer protocol) or FTP (file transfer protocol), or as an object sent over a higher level protocol such as SOAP (simple object access protocol). The app state results may be physically transported across a network using multiple packets, frames, etc.

In FIG. 5A, an app state results structure 550 includes an app list 550-1. For example, the app list 550-1 may include an array of strings, each string storing an app name. The order of the array may generally be from most relevant to least relevant, though the order may be adjusted based on sponsorship. The number of apps provided in the app list 550-1 may be chosen according to a resolution of the device sending the query wrapper. For example, a device with a larger screen and/or higher resolution may receive a larger number of apps. In addition, the number of apps provided may be specified by the app developer using the developer portal 304 or the software development kit.

An app state list 550-2 includes an array of pairs, where a first value of each pair corresponds to an app state (which may be a title, such as for THE FRENCH LAUNDRY restaurant) and the second value of each pair corresponds to the associated app (such as for the YELP app).

An images field 550-3 may include encoded images, such as icons, for each of the apps in the app list 550-1. In other implementations, the images field 550-3 may include encoded images, such as screenshots, for each of the app states in the app state list 550-2.

An app access links field 550-4 specifies access mechanisms for a default state of each of the apps in the app list 550-1. For example, the access links may include commands to open the app if installed and/or links to a digital distribution platform to download an app that is not installed. Another access mechanism may be a URL (uniform resource locator) to access a web-based app through a browser. When the app state results structure 550 is returned, code within the app may determine whether open versus download is the appropriate action based on the specific installation status of each app.

An app state access links field 550-5 specifies access mechanisms for each of the app states in the app state list 550-2.

Additional metadata 550-6 may include a rating for each app (such as a number of stars), a text description for each app, review text and metrics (such as number of reviews), and a designation of sponsorship. The sponsorship designation may be a simple binary flag or may include an indication of sponsorship level. For example, a sponsor may be willing to pay a greater amount for a new install than for an existing app. This level of interest by the sponsor may allow the app to promote the sponsored app more prominently in hopes of recognizing that revenue.

The additional metadata 550-6 may include download velocity (the number of downloads over a recent time horizon) or other indicators of trending popularity of an app. A new and valuable app may not yet have a large installed base, but may show rapid growth in number of downloads. Therefore, trending popularity may be used as a signal to rank the display of apps, with trending apps moved higher up in a results list. Further, a visual indication of trending, such as text (“trending” or a word correlated with trending, such as “popular”) or an icon, may be shown in close proximity to an app for which a trending metric of the app is above a threshold. The threshold may be an absolute threshold for all apps, or may be relative/normalized to the market segment in which the app exists or to the other apps in the results list.

An entity list field 550-7 includes a list of entities (such as a list of plaintext names) corresponding to the app state list in 550-2, and a mapping of which app states correspond to which entities.

In FIG. 5B, app state results 554 may include an HTML (hypertext markup language) image map 554-1. The HTML image map 554-1 may be a single image, such as a JPEG (joint photographic experts group) or PNG (portable network graphics) image, divided into separate areas. Each area corresponds to an app or app state and shows text and/or icons corresponding to that app or app state. When the HTML image map is actuated, the corresponding section of the image map activates a corresponding access mechanism for the app or state displayed in that region of the HTML image map 554-1.

The HTML image map 554-1 may be sized according to the size of the requesting device by the search system 132. In other implementations, multiple HTML image maps may be provided and an appropriate one may be selected at the device according to the resolution of the device's screen and the amount of real estate to be dedicated to the results display. The search system 132 may create an HTML image map that will work with a certain range of display sizes and resolutions, and if the specified region for display is within that certain range, the HTML image map may be proportionally scaled by the device.

In FIG. 6, a high-level functional block diagram of an example implementation of the developer portal 304 is shown. The developer portal 304 includes a user interface 600, which may be implemented as a website, for access by the app developer 300. A developer authentication module 604 stores credentials for various developers and securely authenticates each developer to the developer portal 304. The developer authentication module 604 may store credentials of app developers in a data store 608. Credentials are stored according to best practices, such as by adding a cryptographic salt value and using PBKDF2 (Password-Based Key Derivation Function 2).

An app blocking management module 612 allows for the formulation of patterns that match against apps desired to be blocked by the app developer 300. The patterns and explicitly-selected apps to block are stored in the data store 608, and may have associated metadata indicating whether those apps are blocked for all apps of the developer, for a specific app of the developer, or for a specific function of one or more apps. The entire list of apps available to be blocked may also be stored in the data store 608, and may be obtained from the search system 132.

A search service communication module 616 may periodically update the data store 608 based on the list of apps recognized by the search system 132. User-specific data may be encrypted while stored in the data store 608. In various implementations, general data, such as the list of apps, may be stored in unencrypted form.

An entity mapping module 618 provides entity data from the data store 608 to the app developer 300 and/or provides entity data from the app developer 300 to the data store 608. When the app developer 300 is providing their own internal entity IDs, the entity mapping module 618 may coordinate creation of a mapping between the entities of the app developer 300 and the entities of the search system 132. Matching of these sets of entities is nontrivial and may require manual effort as well as automated heuristic matching. In various implementations, an initial mapping may be generated by the entity mapping module 618 and provided to the app developer 300 for manual review and correction. The entity mapping may then be provided via the search service communication module 616 to the search system 132 so that developer specific entity IDs can be mapped to search system entity IDs.

An app management module 620 tracks various apps that each developer is working on, including names and other parameters of each app. An app functionality management module 624 tracks what external functionality is being used for each app. The app functionality management module 624 stores a list of the functions used in each app in the data store 608. The app management module 620 stores a list of apps developed by the app developer in the data store 608.

A user interface customization module 628 stores data controlling how each function or app will appear as specified by the developer. This may include graphical properties of a button, such as whether a shadow is present, whether a 3D effect is used, font, etc. In addition, preferences for labelling and presentation of sponsored apps may be set using the user interface customization module 628 and stored in the data store 608.

A monetization preferences module 632 stores monetization preferences for each app developer. In various implementations, monetization preferences may be different for each app of the app developer. An app developer, or an advertiser working on behalf of an app developer, may use the monetization preferences module 632 to book promotion of their app, even if their app does not take advantage of the external functionality features offered by the developer portal 304.

In other words, such developers can pay (according to, for example, cost per impression, cost per click, or cost per install) to have their app promoted by app developers who have implemented external functionality using the code offered by the developer portal 304. For this reason, the developer portal 304 may also be referred to as an advertiser portal. In various implementations, the developer portal 304 may charge a developer a fee (which may be assessed per app or per query sent to the search system 132) to use the code and services from the developer portal 304.

A code generation module 636 generates code to be provided to the app developer 300. This code may include a custom SDK library based on data from the app blocking management module 612, the app management module 620, the app functionality management module 624, the user interface customization module 628, and the monetization preferences module 632. The code generation module 636 may generate specific API calls to implement the preferences of the app developer. The code generation module 636 may also provide a software development kit to the app developer 300.

As preferences change in the data store 608, the search service communication module 616 may update the search system 132 with the updated preferences. In this way, the app developer may be able to alter which apps are blocked, which sponsored apps are shown, etc. for an app that has already been distributed.

In FIG. 7, a high-level functional block diagram of an example implementation of the advertiser portal 316 is shown. The advertiser portal 316 includes a user interface 650, which may be implemented as a website, for access by the advertiser 320. An authentication module 654 stores credential information for each advertiser into a data store 656 and securely authenticates each advertiser to the advertiser portal 316.

An entity selection module 658 allows the advertiser 320 to select states for sponsorship. For example, in a restaurant context, the advertiser 320 may set a bid price for the FRENCH LAUNDRY restaurant entity of the YELP app. The advertiser 320 may condition the bid price on the French Laundry Yelp state being shown on a user device within a first screen of state results, or may condition the bid price on the French Laundry Yelp state being selected by a user. Still further, the advertiser 320 may condition the bid price on some further action by the user, such as installation of the Yelp app or on redemption of a coupon for the French Laundry restaurant within the Yelp app. As another example, the advertiser 320 may condition a bid price for the French Laundry state of the OPENTABLE app on reservations being made through the OpenTable app.

The developer may define multiple campaigns, and associate different selected states and bid prices with each campaign. Additional parameters may be associated with each campaign. For example only, a campaign may be limited to a specific operating system, such as Google's ANDROID operating system. A campaign may be limited by time of day, day of week, and by geolocation of the user's device. Settings for each campaign are stored in the data store 656.

The advertiser 320 may specify that an app state should be shown when similar apps or states are included in the consideration set. The similarity may be explicitly specified by the advertiser—for example, by listing apps and/or app states similar to the advertiser's app state. In other implementations, the search system 132 may include a similarity assessment module (not shown) that assesses how similar two apps or app states are to each other.

In various implementations, the advertiser may choose to have their app or app state shown when the search query includes certain keywords. A keyword management module 662 allows the advertiser 320 to select keywords that will trigger a sponsored app or app state. The keywords may be triggered by language in a user device's search query, or based on text associated with apps or app states that are being considered for presentation to the user. The advertiser 320 identifies what sponsored app state should be included in search results when a keyword is detected. The keyword settings for each campaign are stored in the data store 656.

Keyword campaigns and state-based campaigns may be overlapping or may be defined independently. For example, a sponsored state in the entity selection module 658 may be associated with a bid price, and the bid price may be used in ranking the sponsored state when the search system 132 is generating search results for a user device. Meanwhile, a keyword specified in the keyword management module 662 may be used to trigger inclusion of an app or app state that was not already under consideration for inclusion in search results. The advertiser may specify that a sponsorship should only be triggered by keyword in a situation where the advertiser does not want to pay to visually emphasize an app or app state that is already included in search results, but would be willing to pay for the app or app state to be included.

A coupon management module 666 allows the advertiser 320 to specify coupons that are associated with a state. The existence of coupons may be displayed on a user device at no cost to the advertiser 320 to provide users of the search system 132 with as many promotional opportunities as possible. Alternatively, the advertiser portal 316 may charge the advertiser 320 for placing coupon information next to a state. For example only, the advertiser 320 may indicate to the coupon management module 666 that a coupon (such as “$10 Off Prix Fixe Menu on Thursdays”) is offered by the FRENCH LAUNDRY restaurant state of the YELP app. The advertiser portal 316 may then cause a coupon label to be displayed when the French Laundry state of the Yelp app is included in search results.

A user interface customization module 670 receives, from the advertiser 320, data controlling (or suggesting, depending on how sponsorship is processed by a user device) how sponsorship and coupons will appear, as specified by the developer. This may include graphical properties of a text box or button, such as whether a shadow is present, whether a 3D effect is used, font, etc.

A monetization preferences module 674 records monetization preferences for the advertiser 320 in the data store 656. The monetization preferences module 674 receives payment information for the advertiser 320 and may also manage bid prices for sponsorships set using the entity selection module 658, the keyword management module 662, and the coupon management module 666.

A search service communication module 678 may periodically update the data store 656 based on the list of apps and the list of app states recognized by the search system 132. The general data, such as the list of apps and app states, may be stored in unencrypted form. Meanwhile, any data specific to the advertiser 320 may be encrypted while in the data store 656. As preferences change in the data store 656, the search service communication module 678 provides the updated preferences to the search system 132 for use in identifying and scoring apps and app states.

FIG. 8 illustrates an example environment of the search system 132. The search system 132 is a collection of computing devices that receives search queries from user devices via the network 324. Although shown in FIG. 1A as a smartphone 104, a user device can be any suitable user computing device, such as a tablet computing device, a laptop computing device, a gaming device, a vehicle infotainment device, a wearable device, or a smart appliance (such as a smart refrigerator or smart television). In response to receiving a search query from the user device, the search system 132 generates search results based on the search query, as described in more detail below.

In some implementations, user devices communicate with the search system 132 via a partner computing system (not illustrated). The partner computing system may be a computing system of a third party that leverages the search functionality of the search system 132. The partner computing system may be owned by a company or organization other than the operator of the search system 132. Examples of such third parties include Internet service providers, aggregated search portals, and mobile phone providers. The user devices may send search queries to the search system 132 and receive search results from the search system 132, all via the partner computing system. The partner computing system may provide a customized user interface to the user devices and/or may modify the search experience provided on the user devices.

The example implementation of the search system 132 shown in FIG. 8 includes a search module 700, which references entity data stored in the entity data store 272. The search module 700 references access templates stored in the access templates data store 268. The data in the access templates data store 268 and the entity data store 272 may be obtained from data sources 708. The access templates data store 268 and the entity data store 272 may be maintained and updated by the search module 700 and/or a maintenance component (not shown) of the search system 132.

The access templates data store 268 and the entity data store 272 may be updated with databases, indices, tables, files, and other data structures, which may be populated by the data sources 708. The entity data store 272 may store application records, which may be in the format shown in FIG. 9A, and may store entity records, which may be in the format shown in FIG. 11A. The access templates data store 268 may store access template records, which may be in the format shown in FIG. 10A.

Parsers and other ETL (extract, transform, and load) processes may adapt data from the data sources 708 for storage in the entity data store 272. In some implementations, data may be manually entered and/or manually transformed into a format usable by the entity data store 272. The data sources 708 may include data from application developers 708-1, such as application developers' websites and data feeds provided by developers.

The data sources 708 may include operators of digital distribution platforms 708-2 configured to distribute native applications to user devices. Example digital distribution platforms 708-2 include the Google PLAY digital distribution platform by Google, Inc., the APP STORE digital distribution platform by Apple, Inc. and WINDOWS PHONE store by Microsoft Corp. The data sources 708 may also include other websites, such as blogs 708-3, application reviews websites 708-4, and social networking sites 708-5, such as the FACEBOOK site by Facebook, Inc. and the TWITTER site by Twitter, Inc.

The data sources 708 may also include online databases 708-6 of data related to movies, television programs, music, restaurants, etc. Each of the data sources 708 may have independent ontologies and may be updated at different rates. Therefore, the entity data store 272 may be updated from each of the data sources 708 at different rates. In addition, credibility and accuracy of data may differ across the data sources 708. Measures of reliability, timeliness, and accuracy may be stored in the entity data store 272 and may be used to weight search results obtained from those data sources 708.

In FIG. 9A, an example format of an application record 800 includes an application name 800-1, an application identifier (ID) 800-2, and application attributes 800-3. The application record 800 generally represents data that can be stored in the entity data store 272 for a specific application. The entity data store 272 may include thousands or millions of records having the structure specified by the application record 800. The application ID 800-2 uniquely identifies an application in the entity data store 272. The application ID 800-2 may be assigned by the search system 132 and may therefore be independent of any ID assigned by, for example, a digital distribution platform.

A single value for the application ID 800-2 may cover multiple application editions. The term “edition” applies to multiple versions of a single app and may also apply to versions of that app released for alternative operating systems. For example only, Angry Birds (as shown in FIG. 9B) may be available on Android and iOS mobile device platforms and, for each platform, may have a series of versions bug fixes are released and as the application is updated to take advantage of, and to adapt to, newer versions of operating system.

An example application record 804 for an ANGRY BIRDS app includes a name 804-1 of “Angry Birds” and a unique ID 804-2 expressed in hexadecimal as 0x3FF8D407. Attributes 804-3 for Angry Birds may include a name of the developer of Angry Birds, text reviews of Angry Birds, a genre indicator for Angry Birds (such as “Games,” or sub-genre “Physics-Based Games”), ratings (such as star ratings) for Angry Birds, a textual description (which may be provided by the developer), a number of downloads (which may be restricted to the most recent edition or could be for all editions), access mechanisms (how to open Angry Birds when already installed or how to install Angry Birds when not yet installed), and device info (for example, minimum requirements of operating system, hardware, and resolution for best operation).

The term “software application” can refer to a software product that causes a computing device to perform a function. In some examples, a software application may also be referred to as an “application,” an “app,” or a “program.” Software applications can perform a variety of different functions for a user. For example, a restaurant reservation application can make reservations for restaurants, and an Internet media player application can stream media (such as a song or movie) from the Internet.

In some examples, a single software application can provide more than one function. For example, a restaurant reservation application may also allow a user to read user reviews for a restaurant in addition to making reservations. As another example, an Internet media player application may also allow a user to perform searches for digital media, purchase digital media, generate media playlists, and share media playlists.

The functions of an application can be accessed using native application editions of the software application and/or web application editions of the software application. A native application edition (or, “native application”) is, at least in part, installed on a user device. In some scenarios, a native application is installed on a user device, but accesses an external resource (e.g., an application server) to obtain data from the external resource. For example, social media applications, weather applications, news applications, and search applications may respectively be accessed by one or more native applications that execute on various user devices. In such examples, a native application can provide data to and/or receive data from the external resource while accessing one or more functions of the software application.

In other scenarios, a native application is installed on the user device and does not access any external resources. For example, some gaming applications, calendar applications, media player applications, and document viewing applications may not require a connection to a network to perform a particular function. In these examples, the functionality of the software product is encoded in the native application itself.

Web application editions (also referred to as “web applications”) of a software application may be partially implemented by a user device (such as by a web browser executing on the user device) and partially implemented by a remote computing device (such as a web server or application server). For example, a web application may be an application that is implemented, at least in part, by a web server and accessed by a web browser native to the user device. Example web applications include web-based email, online auctions websites, social-networking websites, travel booking websites, and online retail websites. A web application accesses functions of a software product via a network. Example implementations of web applications include web pages and HTML5 application editions.

When rendering a set of app search results, a user device displays a set of user-selectable links that can be selected by a user of the user device. A user-selectable link may include one or more underlying access mechanisms. A user-selectable link, when selected by a user, causes the user device to access a software application using an edition of the software application identified by the access mechanism.

Examples of access mechanisms include application access mechanisms, web access mechanisms, application download addresses, and scripts. An application access mechanism may be a string that includes a reference to a native application and indicates one or more operations for the user device to perform. If a user selects a user selectable link including an application access mechanism, the user device may launch the native application referenced in the application access mechanism.

In some implementations, any combination of the operating system of the user device, a search application executed by the user device, a native application executed by the user device, and/or a web browser executed by the user device can launch the native application referenced in the application access mechanism. An application resource identifier is an example application access mechanism.

A web access mechanism may be a string that includes a reference to a web application edition of a software product, and indicates one or more operations for a web browser to execute. A web access mechanism may be a resource identifier that includes a reference to a web resource (e.g., a page of a web application/website). For example, a web access mechanism may refer to a uniform resource locator (URL) used with hypertext transfer protocol (HTTP). If a user selects a user-selectable link including a web access mechanism, the user device may launch a web browser application and may pass the resource identifier to the web browser.

An application download access mechanism may indicate a location (such as a digital distribution platform) where a native application can be downloaded in the scenario where a native application edition of the application is not installed on the user device. If a user selects a user-selectable link including an application download access mechanism, the user device may access a digital distribution platform from which the referenced native application edition may be downloaded. The user may opt to download the native application edition. Upon installation, the user device may automatically launch the native application edition.

A script access mechanism is a set of instructions that, when executed by the user device, cause the user device to access a resource indicated by the script. For example, the script may instruct an operating system of the user device to launch a digital distribution platform interface application; browse to the specified native application within the digital distribution platform interface application; install the specified native application; and then open the specified native application.

In FIG. 10A, an example format of an access template record 840 includes an application ID 840-1, a function ID 840-2 (from a function ontology, such as the function ontology 220), and a list of parameter types 840-3 input to the access template to generate an access mechanism 840-4.

In FIG. 10B, an example access template record 844 is demonstrated in conformance with the format of FIG. 10A. An application ID 844-1 indicates “Google Play.” Note that the ID may in fact be something other than plaintext, such as a binary or alphanumeric sequence. A function ID 844-2 indicates that the function is providing movie reviews. Again, the function ID 844-2 may simply be a prearranged unique identifier (such as binary or alphanumeric) that is tied to a specific function in the function ontology.

Input parameter types 844-3 include a single input parameter, which is of type “movie ID.” This indicates that the example access template record 844 can be used as long as a movie type of entity (which will have a movie ID) has been established and the entity includes Google-specific data or a link to a Google-specific entity. An access mechanism 844-4 provides a format to create an access URL with two parameters. These two parameters are looked up from a Google-specific entity linked to the entity identified by the movie ID.

FIGS. 11A-11C show example entity records. The entity data store 272 includes data associated with a variety of different entities. The entity data store 272 may include one or more databases, indices (e.g., inverted indices), files, or other data structures storing this data. The entity data store 272 of the present disclosure includes a variety of entity records. Each entity record includes data associated with a different entity. For example, an entity record may include data that is descriptive of an entity.

The term “entity” may generally refer to a noun (e.g., a person, animal, place, thing, or idea). Examples of entities may include, but are not limited to, the movie named “The Lion King”, the soundtrack named “The Lion King”, the song named “Hey Jude”, and the book named “The Hobbit”. Although an entity often refers to a noun, an entity may include other parts of speech (e.g., verbs, adjectives, etc.).

An entity record may be a data structure that includes an entity name, an entity type, and entity information. An entity name may include one or more words, numbers, and/or symbols (e.g., punctuation marks). In some examples, the entity name may refer to a noun, which denotes a person, animal, place, thing, or idea.

In one example, the entity name of the entity record for The Lion King movie may be “The Lion King”. In another example, the entity name of the song Hey Jude may be “Hey Jude”. Although entity names may refer to a noun, it is contemplated that entity names may also refer to other parts of speech, such as verbs, pronouns, adjectives, etc.

Each entity record may include an entity type that may indicate a category in which the entity name and the entity information belongs. Put another way, the entity type may indicate a category in which the data of the entity record belongs. An entity type may include one or more words, numbers, and/or symbols (e.g., punctuation marks). An entity type may be described by a noun in some examples. Example entity types include, but are not limited to, a movie entity type, a music entity type, a book entity type, and a game entity type.

In one example, an entity record having the entity name “The Lion King” may have an entity type “movie”. In this example, the entity type “movie” indicates that the entity record named “The Lion King” relates to a movie. In another example, an entity record having the entity name “The Lion King Soundtrack” may have an entity type “music”. In this example, the entity type “music” indicates that the entity record named “The Lion King Soundtrack” relates to music.

Each entity record may include entity information. Entity information may refer to data included in the entity record in addition to the entity name and the entity type. Entity information may include various types of data. For example, entity information may include structured, semi-structured, and/or unstructured data. Examples of different types of data that may be included in entity information is described below.

Structured data in the entity information of an entity record may include data that is associated with a defined data field. In some implementations, the defined data fields may be tailored to the entity type of the entity record. For example, entity information for an entity record having a movie entity type may include data fields for actor(s), director(s), and producer(s).

As another example, entity information for an entity record having a music type may include data fields for an artist's name, track names, and track lengths. As another example, entity information for an entity record having a book type may include data fields for an author's name, a publisher, and a publication date.

Unstructured data in the entity information of an entity record may include data that is not specifically associated with a defined data field. Instead, unstructured data may be in free form, such as text from websites, review articles, wiki articles, or other sources. For example, entity information for a movie entity type may include unstructured data, such as critic reviews and plot summaries. As another example, entity information for a book entity type may include unstructured data, such as book synopses, book reviews, and passages from the book.

Semi-structured data in the entity information of an entity record may refer to data that at a broad level is associated with a data field, but the data within the data field is provided in an unstructured manner. For example, data in the entity information may be broadly associated with a description data field, but text associated with the description data field may be considered unstructured at a more granular level. In the example of a book entity, semi-structured data may include a synopsis of a book chapter in a data field for that chapter of the book. In the example of a movie entity, semi-structured data may include movie review text in a data field for movie reviews.

In some implementations, an entity record may also include an entity identifier (ID) that identifies the entity record amongst the other entity records included in the entity data store 272. For example, the entity ID may uniquely identify the entity record. The entity ID may be a string of alphabetic, numeric, and/or symbolic characters (e.g., punctuation marks) that uniquely identify the entity record in which the entity ID is included.

In implementations of the entity data store 272 where different entity records have the same entity name, the entity ID and/or the entity type may be used to differentiate the entity records. For example, the entity name “Beethoven” could be associated with a variety of different entity records such as an entity record having a music entity type, an entity record having a biographic book entity type, and an entity record having a movie entity type. Though otherwise similar in name, the entity ID permits differentiation between these “Beethoven” entity records.

The search system 132 retrieves entity data from various data sources 708. The entity data retrieved from various data sources 708 can include any type of data related to entity records described herein. For example, the entity data may include any data related to an entity name, an entity type, entity information, an entity quality score, and a list of associated applications.

The search system 132 is configured to generate and update the entity data store 272 based on data retrieved from the data sources 708. For example, the search system 132 may use the retrieved data to update one or more databases, indices, files, or other data structures included in the entity data store 272. The search system 132 may generate new entity records and update existing entity records based on the data retrieved from the data sources 708. In some examples, some data included in the entity data store 272 may be manually generated.

FIG. 11A shows an example entity record 880 that may be included in the entity data store 272. The entity record 880 may generally represent data stored in the entity data store 272 that is related to an entity (e.g., a noun). It is contemplated that the data included in the illustrated entity record 880 could be stored and accessed in a variety of different ways.

The entity data store 272 includes data related to a variety of different entities. Accordingly, the entity data store 272 may include a variety of entity records having a similar structure as the entity record 880. Put another way, the entity data store 272 may include a variety of entity records having an entity name 880-1, an entity ID 880-2, an entity type 880-3, and entity information 880-4.

The entity name 880-1 may include one or more words, numbers, and/or symbols (e.g., punctuation marks). In some examples, the entity name 880-1 may denote a person, animal, place, thing, or idea. The entity record 880 includes an entity type 880-3 that indicates a category in which the data of the entity record 880 belongs. For example, the entity type 880-3 indicates the category in which the entity name 880-1 and the entity information 880-4 belong. The entity type 880-3 may include one or more words, numbers, and/or symbols (e.g., punctuation marks). For example, the entity type 880-3 may be a noun.

The entity record 880 includes an entity identifier 880-2 (i.e., “entity ID 880-2”). The entity ID 880-2 may identify the entity record 880 amongst the other entity records included in the entity data store 272. For example, the entity ID 880-2 may uniquely identify the entity record 880. The entity ID 880-2 may be a string of alphabetic, numeric, and/or symbolic characters (e.g., punctuation marks) that uniquely identify the entity record 880.

FIGS. 11B-11C show different example entity records 884, 888. Entity record 884 includes data related to the movie named “The Dark Knight Rises”. Entity record 888 includes data related to the comic book named “The Dark Knight Rises”. The entity names 884-1, 888-1 for the entity records 884, 888 include the names of the movie and the comic book, respectively. In the example entity names 884-1, 888-1, the stop word “the” has been removed. The entity type “movie” of entity record 884 indicates the category in which the entity name “Dark Knight Rises” and the entity information 884-4 belongs.

Put another way, the entity type “movie” of the entity record 884 indicates that the entity name 884-1 and entity information 884-4 included in the entity record 884 is related to a movie. The entity type “comic book” of entity record 888 indicates the category in which the entity name “Dark Knight Rises” and the entity information 888-4 belongs. Put another way, the entity type “comic book” of the entity record 888 indicates that the entity name 888-1 and the entity information 888-4 included in the entity record 888 is related to a comic book.

The entity records 884, 888 include different entity IDs 884-2, 888-2. Specifically, entity records 884, 888 include entity IDs “ID#1” and “ID#2”. Entity IDs “ID#1” and “ID#2” represent different entity IDs that may uniquely identify entity records 884, 888, respectively. For example, “ID#1” and “ID#2” may represent different strings of alphabetic, numeric, and/or symbolic characters that uniquely identify entity records 884, 888 in the entity data store 272.

Referring back to FIG. 11A, the entity record 880 includes entity information 880-4. The entity information 880-4 represents data in the entity record 880 in addition to the entity name 880-1 and the entity type 880-3. In general, the entity information 880-4 may include any data that is associated with either the entity name 880-1 or the entity type 880-3. In some implementations, the data included in the entity information 880-4 may be data that is associated with both the entity name 880-1 and the entity type 880-3. Put another way, the data included in the entity information 880-4 may be related to the entity name 880-1 and included in a category described by the entity type 880-3.

The entity information 880-4 may include various types of data (e.g., structured, semi-structured, and/or unstructured data). Structured data in the entity information 880-4 may refer to data included in a defined data field. Semi-structured data in the entity information 880-4 may refer to data that at a broad level is associated with a data field, but the data within the data field is provided in an unstructured manner. Unstructured data in the entity information 880-4 may include data that is not specifically associated with a defined data field.

The entity information 880-4 may include data that is associated with a defined data field. In some examples, the defined data fields may be tailored to the entity type 880-3 of the entity record 880. For example, entity records having a first entity type may include a first set of data fields associated with the first entity type. Entity records having a second entity type that is different than the first entity type may include a second set of data fields associated with the second entity type that are different than the first set of data fields. In other examples, the entity records included in the entity data store 272 may have similar data fields, even when the entity records include different entity types.

The entity information 880-4 may include any type of data related to an entity, including, but not limited to, numbers or other statistics related to the entity, names, dates, text from websites, review articles, wiki articles, or other type of data. For example, if the entity type 880-3 is “movie”, then the entity information 880-4 may include data fields for actor(s), director(s), producer(s), review(s), and plot summaries.

As another example, if the entity type 880-3 is “music”, then the entity information 880-4 may include data fields for an artist's name, track names, and track lengths. As another example, if the entity type 880-3 is “book”, then the entity information 880-4 may include data fields for an author's name, a publisher, and a publication date.

FIGS. 11B-11C show examples of entity information 884-4, 888-4 included in entity records 884, 888. The entity information 884-4 included in entity record 884 is related to the movie named “The Dark Knight Rises”. The entity information 888-4 included in entity record 888 is related to the comic book named “The Dark Knight Rises”. The entity information 884-4 includes data fields related to a movie, such as a list of actors, a director, reviews, and a plot summary. The entity information 888-4 includes data fields related to a comic book, such as one or more authors, one or more artists, a publication date, and comic book reviews.

The data fields illustrated in the entity information 884-4, 888-4 of FIGS. 11B-11C are only example data fields that may be included in entity information. It is contemplated that entity information 884-4, 888-4 may include additional data fields not illustrated in FIGS. 11B-11C. In some examples, the entity information 884-4, 888-4 may not include some or all of the data fields illustrated in FIGS. 11B-11C.

The different data fields included in the entity information 884-4, 888-4 of entity records 884, 888 illustrate how different entity records may include different data fields. The different data fields included in the entity information 884-4, 888-4 of entity records 884, 888 also illustrate how the data fields included in entity records may be related to the entity type of the entity record. For example, entity record 884 having a “movie” entity type may include data fields related to a movie, such as a list of actors and a director. Similarly, the entity record 888 having a “comic book” entity type may include data fields related to a comic book, such as author(s) and artist(s). Some data fields that are specific to an entity type may not be as meaningful in an entity record having a different entity type. For example, a data field for a list of actors may not be meaningful in an entity record having a “comic book” entity type.

In FIG. 12, an example implementation of the search module 700 includes a query understanding pipeline 904 that identifies relevant entities from the context object and query object of the query wrapper. An entity restriction module 908 receives the query object and, based on the specified function ID, identifies entities within the entity data store 704 that are capable of being used in a functional URL for the specified function. This subset of entities is provided to entity identification module 912, which identifies one or more entity records from the subset of entity records in response to scored terms from a tokenization and scoring module 916.

The tokenization and scoring module 916 receives the context object, which includes text from the state of the app that triggered the transmission of the query wrapper. The tokenization and scoring module 916 receives not just text but also text attributes, such as font, font size, emphasis (bold, underline, italics, color, etc.), proximity to top of page, etc. Further, tags such as HTML (hypertext markup language) or XML (extensible markup language) tags, may indicate the importance of a term. For example, a tag may identify a term or phrase as a heading or a sub-heading. Each of the above characteristics is a clue as to the relevance of a particular term. The tokenization and scoring module 916 may generate initial scores for a set of terms extracted from the text provided in the context object.

A common language recognition module 920 may track language that is used in each type of state received from each app that includes the SDK library. Language that is common to many states of a single type is unlikely to be helpful in defining the entity of interest. The common language recognition module 920 may therefore provide an indication of which received terms are relatively common, which would decrease their score in the token recognition and scoring module 916.

The entity identification module 912 may select entity records from the entity restriction module 908 by detecting matches or near matches between terms from the token recognition and scoring module 916 and terms in the entity record, such as entity name, entity type, and entity information. The entity identification module 912 may attempt to identify entities corresponding to terms that received the highest scores from the token recognition and scoring module 916, and search for entities corresponding to the lower-scoring terms only when entities corresponding to the higher-scoring terms are not found.

Entities identified by the entity identification module 912 are provided to a functional URL consideration set generation module 924, which includes a type and application matching module 928 and a function matching module 932. The type and application matching module 928 determines which access templates are relevant based on the type of entities provided by the entity identification module 912.

The function matching module 932 receives the query object and selects a subset of access templates from the access template store 706 that correspond to the specified function in the function ontology. This subset of access templates is provided to the type and application matching module 928. For access templates that can be satisfied by the entities provided by the entity identification module 912, the type and application matching module 928 determines whether, for each of the type matched access template, any application-specific information is present for the corresponding entities.

When both the type and the application-specific data match between provided entities and one of the access templates from the function matching module 932, a functional URL is created. The functional URL may be associated with a score, which may be based at least in part on the score from the token recognition and scoring module 916. The type and entity matching module 928 outputs ordered sets of application, function, and entity (which may be expressed in the form of a functional URL) to a scoring module 936.

The scoring module 936 reviews the provided scores and may adjust the scores based on data from a developer portal module 940 and a sponsorship module 944. An access URL mapping module 948 generates access URLs for the functional URLs with the highest scores from the scoring module 936. Based on the access templates from the access templates data store 268 and application-specific information from the entity data store 272, the access URL mapping module 948 produces access URLs. As one example only, see FIG. 1E. The resulting access URLs are returned, as part of the result set, to the user device.

The developer portal module 940 receives data from the developer portal 304, such as blacklists, and may force a score to zero for any functional URL that is matched by the blacklist. The developer portal data module 940 may also specify other parameters to the scoring module 936, such as to exclude any application records and application state records tied to the application that transmitted the query wrapper; this avoids returning self-referential results.

The sponsorship module 944 communicates with the advertiser portal 316 and may increase scores for functional URLs meeting sponsorship criteria. In other implementations, the sponsorship module 944 may instruct the scoring module 936 to include a functional URL as a sponsored result regardless of the score assigned to the functional URL. The sponsorship module 944 may also label functional URLs with a sponsorship designation, which may be visually displayed to a user.

The sponsorship module 944 may also identify functional URLs that correspond to coupons and can provide the coupon information to the user via the scoring module 936. The sponsorship module 944 may operate according to a variety of targeting parameters, which may be specified by an advertiser, such as by using the advertiser portal 316. For example, the advertiser may desire to have their app shown when similar apps are included in the result set.

The similarity may be explicitly specified by the advertiser—for example, by listing apps similar to the advertiser's app. In other implementations, the search system 132 may include a similarity assessment module (not shown) that assesses how similar two apps are to each other. The similarity assessment module may determine the similarity between each of the apps in the consideration set with each of the potential sponsored apps. In various implementations, the advertiser may choose to have their app shown when the search query includes certain keywords.

The sponsorship module 944 may take into account whether a sponsored app is already installed on the user device from which the query wrapper was received. An advertiser may only be willing to pay a reduced price (or even nothing) to promote their app if their app is already installed on the user device.

The sponsorship module 944 may select sponsored apps based on bid prices set by advertisers. An advertiser may set different bid prices to promote their app based on, for example, whether their app is already installed, how similar their app is to other apps in the result set, etc. The sponsorship module 944 may choose, for inclusion in the ordered search results, apps having the highest bid prices for the present search.

In FIG. 13, an example implementation of a software object (referred to as SDK library 1000) provided by the developer portal 304 is shown. A query wrapper module 1004 is triggered by a user interface element 1008 of an app state 1012 of the developer's app. As described above, the user interface element 1008 may be a button, such as a “Movie Reviews” button or a “Get Directions” button.

When the query wrapper module 1004 is triggered, a text extraction module 1014 scrapes text and formatting from the app state 1012. A tokenization and scoring module 1016 may be implemented in addition to, or in place of, the tokenization and scoring module 916 of the search module 700 (see FIG. 12). Similarly, a common language recognition module 1020 may also be provided in some implementations in place of, or in addition to, the common language recognition module 920 of FIG. 12. The text and formatting of the text extraction module 1014, or the scored tokens from the tokenization and scoring module 1016, are incorporated into the query wrapper module 1004.

An account recognition module 1024 identifies active user accounts on the user device. For example, an account with a streaming video operator may indicate that some or all movies from that provider can be streamed as part of the existing subscription service. The account recognition module 1024 provides this account data to the query wrapper module 1004. This account data may be used by the search system 132 to score results, with results able to be serviced by existing subscriptions ranked higher than results that would require an additional subscription.

An installed applications module 1028 provides information on installed applications to the query wrapper module 1004. Similar to accounts, the installed applications allow the search system 132 to adjust scores, such as by raising scores of applications already installed and identifying promotion opportunities for applications not yet installed.

A designated function store 1032 stores an identifier of the function designated by the developer during interaction with the developer portal 304. This designated function is from the function ontology (such as the function ontology 220) and has a specific identifier known to the search system 132. The query wrapper module 1004 combines the data provided and transmits a query wrapper to the search system 132 using a search system communication module 1036. When results are received, the search system communication module 1036 provides the results to a results presentation module 1040. If any of the results are selected by a user, a results mechanism module 1044 enacts the specified access mechanism from the results. For example, this may include launching a web browser, opening an application, or opening a digital distribution platform application to allow a desired application to be installed.

In FIG. 14, an overall operational flowchart begins at 1104 where an app developer creates an account on the developer portal, creates a profile for a first app (App A), and selects external functionality for the developer portal to introduce into App A. At 1112, the developer portal provides the SDK library and search interface elements to the developer for incorporation into App A.

At 1114, the developer inserts user interface elements at desired locations within states of App A and selectively links state-specific data to search interface elements. For example, the developer may supply a text title of a state to a search interface element in that state. As another example, for a search interface element adjacent to a movie theatre, the developer may supply a name and/or address of the movie theatre to the search interface element for formation of a query.

At 1116, the app developer builds App A with the provided code. At 1120, the app developer distributes App A over a digital distribution platform. Once App A is available on the digital distribution platform, a user can install and run App A at 1124. At 1128, control determines whether a current screen (or state) of App A includes a search interface element, such as an external functionality button. If so, control transfers 1132; otherwise, control remains at 1128.

At 1132, control determines whether the user has selected (such as by clicking or tapping) the external functionality element. If so, control transfers to 1136; otherwise, control returns to 1128. At 1136, the SDK library in App A gathers data including geolocation, apps installed on the device, a version of the operating system installed on the device, etc. The SDK library may also gather state-specific data, such as a title of a present state or information identifying a relevant entity (such as the name of a movie or the name of a movie theatre). Further, when the search system 132 will be inferring the entity from the context of the state, the SDK library will include some or all of the text and accompanying attributes in the query wrapper. At 1140, the SDK library, based on the gathered data, assembles a query wrapper.

At 1144, an optional decision is made. In certain circumstances, a developer may prefer to hand off presentation of search results to an app operated by the developer portal or by the search system. If this is desired by the developer, the decision at 1144 will transfer to 1148 when the search-system-specific app is present on the device. If the search-system-specific app is not present on the device, or if the developer of App A does not wish to hand off the results presentation to the search-system-specific app, control continues at 1152.

At 1148, the search-system-specific app sends the query wrapper to the search system and at 1156 the search system returns app results. At 1160, the search-system-specific app parses the results and displays the results to the user. Control then continues at 1164.

At 1164, if the user selects one of the links in the result listing, control transfers to 1166; otherwise, if the user exits from the result listing, control returns to 1128. At 1166, control determines whether the app referenced by the link is already installed. If so, control transfers to 1170; otherwise, control transfers to 1168.

At 1168, control downloads the app and continues at 1170. The download of the app may be performed as specified by an access mechanism corresponding to the specified link. At 1170, control opens the selected app and navigates to the specified state, as directed by the access mechanism. Control continues at 1172, where if the user returns to App A from this newly opened app, control transfers to 1128; otherwise, control remains at 1172.

Returning to 1152, the SDK library embedded in App A sends the query wrapper to a predefined search system, which may be specified by a fully qualified domain name or one or more IP (Internet Protocol) addresses. At 1176, the search system returns app results. At 1180, the SDK library parses and displays the results from the search system to the user. As discussed above, the search results may be adjusted based on which apps are already installed—for example, filtering out states of apps not yet installed. In addition, states may be filtered out when account information indicates that the state will not provide the desired functionality to the user. For example, if a state corresponding to streaming a movie was returned, but the movie is not included within the user's subscription, the corresponding state may be moved down in the rankings or removed altogether. Control then continues at 1164.

In FIG. 15, example operation of a developer portal begins at 1204, where a graphical user interface is presented, such as by hosting a website. Control continues at 1208, where if a new user is detected, control creates a user account at 1212 and returns to 1204. If an existing user is detected, control transfers to 1216, where upon successful user authentication, control transfers to 1220. If the user does not successfully authenticate, control transfers to 1224. At 1224, a security policy is applied to the failed authentication.

For example only, the security policy may include exponentially increasing a time that the user has to wait before attempting to authenticate again. In addition, the security policy may include a set number of unsuccessful attempts before the user is prevented from logging in without manual intervention at the developer portal. Further, unsuccessful authentication may be logged and may be communicated to a predetermined email address of the user.

At 1220, control allows selection from among the developers' apps. At 1228, if a new app is indicated by the developer, control transfers to 1232; otherwise, control transfers to 1236. At 1232, control creates a new app record for that developer and control returns to 1220. At 1236, control determines whether the developer has indicated that general settings should be edited. If so, control transfers to 1240, where settings are presented for editing. These settings may include a global blacklist, monetization policies, etc.

Control then returns to 1220. If, at 1236, the developer has not indicated that general settings should be edited, control transfers to 1244. At 1244, control determines whether the developer has indicated that data corresponding to an app should be edited. If so, control transfers to 1248; otherwise, control transfers to 1252. At 1248, control allows for selection of supplemental functions, which indicate external functionality that the developer wants to introduce to their app. In addition, settings for already selected functions may be changed, such as function-specific blocked apps and user interface options. Control then returns to 1220.

At 1252, if a download has been requested, control transfers to 1256; otherwise, control transfers to 1260. At 1260, if the user logs out, control returns to 1304; otherwise, control returns to 1220. At 1256, control prepares a package of images and code to implement the desired external functionality for the selected app. At 1264, control transmits the package to the developer for the developer's integration into an app under development. Control then returns to 1220.

In FIG. 16, a flowchart of example operation of a search system according to the principles of the present disclosure is shown. Control starts at 1304 where the functions provided by apps of interest are identified. Over time, the scope of apps of interest may reach the size of the various mainstream digital distribution platforms and may then even further increase.

At 1308, control maps those functions to a function ontology and updates the function ontology if necessary. In other words, control determines whether a streaming movie watching function of an app belongs is the same function (or, equivalently, can be assigned to the same node) as other streaming movie watching functions, or if there is something unique that requires a different leaf node in the function ontology.

At 1312, control parameterizes access mechanisms to create access templates by observing the URLs and other mechanisms used to access specifics states of the apps of interest. The variable portions of those access mechanisms can be identified so that the access mechanisms can be created by plugging in values into a template.

At 1316, control updates entities corresponding to the apps of interest. For example, as new movies are released or announced, entity data stores for movie-related apps will expand to include these additional entities. At 1320, control determines whether a query wrapper has been received. If so, control transfers to 1324; otherwise, control transfers to 1328. At 1328, control determines whether a first periodic interval has lapsed. If so, controls returns back to 1324; otherwise, control continues at 1332. At 1332, control determines whether a second periodic interval has lapsed. If so, control transfers to 1316; otherwise, control continues to 1320. In various implementations, the first periodic interval may be longer than the second periodic interval. In various implementations, updating entities (the first periodic interval) may be a nightly process while updating functionality of apps (the second periodic interval) may be a monthly process.

At 1324, control tokenizes and scores the relevance of text received in the query wrapper based on attributes of that text. At 1336, control determines a restricted set of entities based on a specified function from the query wrapper. For example, if the specified function involves streaming a movie, entities that are specific to books or to addresses or to restaurants will be irrelevant to the specified function.

At 1340, control identifies from this restricted set relevant entities according to the tokenized and scored text. At 1344, control identifies and scores a consideration set of functional URLs corresponding to the identified relevant entities. As described above, access templates first must have their parameters satisfied by the correct entity type. If an access template requires a certain type of entity and that entity has not been identified, the access template cannot be applied and therefore is removed from the consideration set.

Further, some if not all access templates require app-specific data. If any of the app-specific data required by the access mechanism is not present within the relevant entities, that access mechanism is also removed. Each valid triplet of application, function, and entity is recorded, such as in a functional URL.

The consideration set of functional URLs may then be filtered based on developer choices expressed with the developer portal 304. Therefore, control continues at 1348, where if the user device or app that transmitted the query wrapper is associated with specific search parameters, control transfers to 1352; otherwise, control continues at 1356. At 1352, control filters the consideration set based on the specified search parameters, which may include a blacklist.

Control then continues at 1356. At 1356, control identifies the sponsorship of apps corresponding to functional URLs and/or to entities. At 1360, based on sponsorship, control adjusts the ranking of functional URLs, such as by improving the ranking of functional URLs that are receiving sponsorship. Additionally or alternatively, control may selectively apply a sponsorship tag or a coupon tag to the functional URL, which causes the tagged functional URL to be translated into an access mechanism regardless of its organic score. At 1364, control translates the highest-ranked functional URLs into access mechanisms. At 1368, control responds to the user device with the access mechanisms corresponding to selected app states. Control then continues at 1328.

Modules and data stores included in the search system 132 and the developer portal 304 represent features that may be included in the search system 132 and the developer portal 304 of the present disclosure. The modules and data stores described herein may be embodied by electronic hardware, software, firmware, or any combination thereof. Depiction of different features as separate modules and data stores does not necessarily imply whether the modules and data stores are embodied by common or separate electronic hardware or software components. In some implementations, the features associated with the one or more modules and data stores depicted herein may be realized by common electronic hardware and software components. In some implementations, the features associated with the one or more modules and data stores depicted herein may be realized by separate electronic hardware and software components.

The modules and data stores may be embodied by electronic hardware and software components including one or more processing units, one or more memory components, one or more input/output (I/O) components, and interconnect components. Interconnect components may be configured to provide communication between the one or more processing units, the one or more memory components, and the one or more I/O components. For example, the interconnect components may include one or more buses that are configured to transfer data between electronic components. The interconnect components may also include control circuits (e.g., a memory controller and/or an I/O controller) that are configured to control communication between electronic components.

In some implementations, the search system 132 and the developer portal 304 may be a system of one or more computing devices (e.g., a computer search system) that are configured to implement the techniques described herein. Put another way, the features attributed to the modules and data stores described herein may be implemented by one or more computing devices. Each of the one or more computing devices may include any combination of electronic hardware, software, and/or firmware described above.

For example, each of the one or more computing devices may include any combination of processing units, memory components, I/O components, and interconnect components described above. The one or more computing devices of the search system 132 and the developer portal 304 may also include various human interface devices, including display screens, keyboards, pointing devices (e.g., a mouse), touchscreens, speakers, and microphones. The computing devices may also be configured to communicate with additional devices, such as external memory (e.g., external HDDs).

The one or more computing devices of the search system 132 and the developer portal 304 may be configured to communicate with the network 324. The one or more computing devices of the search system 132 and the developer portal 304 may also be configured to communicate with one another (e.g., via a computer network). In some examples, the one or more computing devices of the search system 132 and the developer portal 304 may include one or more server computing devices configured to communicate with user devices (e.g., receive query wrappers and transmit search results), gather data from data sources 708, index data, store the data, and store other documents.

The one or more computing devices may reside within a single machine at a single geographic location in some examples. In other examples, the one or more computing devices may reside within multiple machines at a single geographic location. In still other examples, the one or more computing devices of the search system 132 and the developer portal 304 may be distributed across a number of geographic locations.

FIG. 15 is a schematic view of an example computing device 1400 that may be used to implement the systems and methods described in this document. The computing device 1400 is intended to represent various forms of digital computers, such as laptops, desktops, workstations, personal digital assistants, servers, blade servers, mainframes, and other computers. The components shown here, their connections and relationships, and their functions, are meant to be exemplary only, and are not meant to limit implementations of the inventions described and/or claimed in this document.

The computing device 1400 includes a processor 1410, memory 1420, a storage device 1430, a high-speed interface/controller 1440 connecting to the memory 1420 and high-speed expansion ports 1450, and a low-speed interface/controller 1460 connecting to low-speed bus 1470 and storage device 1430. Each of the components 1410, 1420, 1430, 1440, 1450, and 1460, are interconnected using various busses, and may be mounted on a common motherboard or in other manners as appropriate.

The processor 1410 can process instructions for execution within the computing device 1400, including instructions stored in the memory 1420 or on the storage device 1430 to display graphical information for a graphical user interface (GUI) on an external input/output device, such as display 1480 coupled to the high-speed controller 1440. In other implementations, multiple processors and/or multiple buses may be used, as appropriate, along with multiple memories and types of memory. Also, multiple computing devices 1400 may be connected, with each device providing portions of the necessary operations (e.g., as a server bank, a group of blade servers, or a multi-processor system).

The memory 1420 stores information non-transitorily within the computing device 1400. The memory 1420 may be a computer-readable medium, a volatile memory unit(s), or non-volatile memory unit(s). The memory 1420 may be physical devices used to store programs (e.g., sequences of instructions) or data (e.g., program state information) on a temporary or permanent basis for use by the computing device 1400. Examples of non-volatile memory include, but are not limited to, flash memory and read-only memory (ROM)/programmable read-only memory (PROM)/erasable programmable read-only memory (EPROM)/electronically erasable programmable read-only memory (EEPROM) (e.g., typically used for firmware, such as boot programs). Examples of volatile memory include, but are not limited to, random access memory (RAM), dynamic random access memory (DRAM), static random access memory (SRAM), phase change memory (PCM) as well as disks or tapes.

The storage device 1430 is capable of providing mass storage for the computing device 1400. In some implementations, the storage device 1430 is a computer-readable medium. In various different implementations, the storage device 1430 may be a floppy disk device, a hard disk device, an optical disk device, or a tape device, a flash memory or other similar solid state memory device, or an array of devices, including devices in a storage area network or other configurations. In additional implementations, a computer program product is tangibly embodied in an information carrier. The computer program product contains instructions that, when executed, perform one or more methods, such as those described above. The information carrier is a computer- or machine-readable medium, such as the memory 1420, the storage device 1430, or memory on processor 1410.

The high-speed controller 1440 manages bandwidth-intensive operations for the computing device 1400, while the low-speed controller 1460 manages less bandwidth-intensive operations. Such allocation of duties is exemplary only. In some implementations, the high-speed controller 1440 is coupled to the memory 1420, the display 1480 (e.g., through a graphics processor or accelerator), and to the high-speed expansion ports 1450, which may accept various expansion cards (not shown).

In some implementations, the low-speed controller 1460 is coupled to the storage device 1430 and low-speed expansion port 1470. The low-speed expansion port 1470, which may include various communication ports (e.g., USB, Bluetooth, Ethernet, wireless Ethernet), may be coupled to one or more input/output devices, such as a keyboard, a pointing device, a scanner, or a networking device such as a switch or router, e.g., through a network adapter.

The computing device 1400 may be implemented in a number of different forms, as shown in the figure. For example, it may be implemented as a standard server 1400-1 or multiple times in a group of such servers 1400-1, as a laptop computer 1400-2, or as part of a rack server system 1400-3.

Various implementations of the systems and techniques described here can be realized in digital electronic and/or optical circuitry, integrated circuitry, specially designed ASICs (application specific integrated circuits), computer hardware, firmware, software, and/or combinations thereof. These various implementations can include implementation in one or more computer programs that are executable and/or interpretable on a programmable system including at least one programmable processor, which may be special or general purpose, coupled to receive data and instructions from, and to transmit data and instructions to, a storage system, at least one input device, and at least one output device.

These computer programs (also known as programs, software, software applications or code) include machine instructions for a programmable processor, and can be implemented in a high-level procedural and/or object-oriented programming language, and/or in assembly/machine language. As used herein, the terms “machine-readable medium” and “computer-readable medium” refer to any computer program product, non-transitory computer readable medium, apparatus and/or device (e.g., magnetic discs, optical disks, memory, Programmable Logic Devices (PLDs)) used to provide machine instructions and/or data to a programmable processor, including a machine-readable medium that receives machine instructions as a machine-readable signal. The term “machine-readable signal” refers to any signal used to provide machine instructions and/or data to a programmable processor.

Implementations of the subject matter and the functional operations described in this specification can be implemented in digital electronic circuitry, or in computer software, firmware, or hardware, including the structures disclosed in this specification and their structural equivalents, or in combinations of one or more of them. Moreover, subject matter described in this specification can be implemented as one or more computer program products, i.e., one or more modules of computer program instructions encoded on a computer readable medium for execution by, or to control the operation of, data processing apparatus.

The computer readable medium can be a machine-readable storage device, a machine-readable storage substrate, a memory device, a composition of matter generating a machine-readable propagated signal, or a combination of one or more of them. The terms “data processing apparatus”, “computing device”, and “computing processor” encompass all apparatus, devices, and machines for processing data, including by way of example a programmable processor, a computer, or multiple processors or computers. The apparatus can include, in addition to hardware, code that creates an execution environment for the computer program in question, e.g., code that constitutes processor firmware, a protocol stack, a database management system, an operating system, or a combination of one or more of them. A propagated signal is an artificially generated signal (e.g., a machine-generated electrical, optical, or electromagnetic signal) that is generated to encode information for transmission to suitable receiver apparatus.

A computer program (also known as an application, program, software, software application, script, or code) can be written in any form of programming language, including compiled or interpreted languages, and it can be deployed in any form, including as a stand-alone program or as a module, component, subroutine, or other unit suitable for use in a computing environment.

A computer program does not necessarily correspond to a file in a file system. A program can be stored in a portion of a file that holds other programs or data (e.g., one or more scripts stored in a markup language document), in a single file dedicated to the program in question, or in multiple coordinated files (e.g., files that store one or more modules, sub programs, or portions of code). A computer program can be deployed to be executed on one computer or on multiple computers that are located at one site or distributed across multiple sites and interconnected by a communication network.

The processes and logic flows described in this specification can be performed by one or more programmable processors executing one or more computer programs to perform functions by operating on input data and generating output. The processes and logic flows can also be performed by, and apparatus can also be implemented as, special purpose logic circuitry, e.g., an FPGA (field programmable gate array) or an ASIC (application specific integrated circuit).

Processors suitable for the execution of a computer program include, by way of example, both general and special purpose microprocessors, and any one or more processors of any kind of digital computer. Generally, a processor will receive instructions and data from a read only memory or a random access memory or both. The essential elements of a computer are a processor for performing instructions and one or more memory devices for storing instructions and data.

Generally, a computer will also include, or be operatively coupled to receive data from or transfer data to, or both, one or more mass storage devices for storing data, e.g., magnetic, magneto optical disks, or optical disks. However, a computer need not have such devices. Moreover, a computer can be embedded in another device, e.g., a mobile telephone, a personal digital assistant (PDA), a mobile audio player, a Global Positioning System (GPS) receiver, to name just a few. Computer readable media suitable for storing computer program instructions and data include all forms of non-volatile memory, media and memory devices, including by way of example semiconductor memory devices, e.g., EPROM, EEPROM, and flash memory devices; magnetic disks, e.g., internal hard disks or removable disks; magneto optical disks; and CD ROM and DVD-ROM disks. The processor and the memory can be supplemented by, or incorporated in, special purpose logic circuitry.

To provide for interaction with a user, one or more aspects of the disclosure can be implemented on a computer having a display device, e.g., a CRT (cathode ray tube), LCD (liquid crystal display) monitor, or touch screen for displaying information to the user and optionally a keyboard and a pointing device, e.g., a mouse or a trackball, by which the user can provide input to the computer. Other kinds of devices can be used to provide interaction with a user as well; for example, feedback provided to the user can be any form of sensory feedback, e.g., visual feedback, auditory feedback, or tactile feedback; and input from the user can be received in any form, including acoustic, speech, or tactile input. In addition, a computer can interact with a user by sending documents to and receiving documents from a device that is used by the user; for example, by sending web pages to a web browser on a user's client device in response to requests received from the web browser.

One or more aspects of the disclosure can be implemented in a computing system that includes a backend component, e.g., as a data server, or that includes a middleware component, e.g., an application server, or that includes a frontend component, e.g., a client computer having a graphical user interface or a Web browser through which a user can interact with an implementation of the subject matter described in this specification, or any combination of one or more such backend, middleware, or frontend components. The components of the system can be interconnected by any form or medium of digital data communication, e.g., a communication network. Examples of communication networks include a local area network (“LAN”) and a wide area network (“WAN”), an inter-network (e.g., the Internet), and peer-to-peer networks (e.g., ad hoc peer-to-peer networks).

The computing system can include clients and servers. A client and server are generally remote from each other and typically interact through a communication network. The relationship of client and server arises by virtue of computer programs running on the respective computers and having a client-server relationship to each other. In some implementations, a server transmits data (e.g., an HTML page) to a client device (e.g., for purposes of displaying data to and receiving user input from a user interacting with the client device). Data generated at the client device (e.g., a result of the user interaction) can be received from the client device at the server.

While this specification contains many specifics, these should not be construed as limitations on the scope of the disclosure or of what may be claimed, but rather as descriptions of features specific to particular implementations of the disclosure. Certain features that are described in this specification in the context of separate implementations can also be implemented in combination in a single implementation. Conversely, various features that are described in the context of a single implementation can also be implemented in multiple implementations separately or in any suitable sub-combination. Moreover, although features may be described above as acting in certain combinations and even initially claimed as such, one or more features from a claimed combination can in some cases be excised from the combination, and the claimed combination may be directed to a sub-combination or variation of a sub-combination.

Similarly, while operations are depicted in the drawings in a particular order, this should not be understood as requiring that such operations be performed in the particular order shown or in sequential order, or that all illustrated operations be performed, to achieve desirable results. In certain circumstances, multi-tasking and parallel processing may be advantageous. Moreover, the separation of various system components in the embodiments described above should not be understood as requiring such separation in all embodiments, and it should be understood that the described program components and systems can generally be integrated together in a single software product or packaged into multiple software products.

A number of implementations have been described. Nevertheless, it will be understood that various modifications may be made without departing from the spirit and scope of the disclosure. Accordingly, other implementations are within the scope of the following claims. For example, the actions recited in the claims can be performed in a different order and still achieve desirable results. As used herein, the phrase at least one of A, B, and C should be construed to mean a logical (A OR B OR C), using a non-exclusive logical OR, and should not be construed to mean “at least one of A, at least one of B, and at least one of C.” 

What is claimed is:
 1. A system of one or more computing devices, the system comprising: a user interface presented to a first application developer; a data store that stores information identifying a plurality of functions and corresponding unique identifiers, wherein each of the plurality of functions corresponds to external functionality available from third party applications; an application functionality management module, implemented by a first one or more processors, that receives a selection from the first application developer of a first function of the plurality of functions to supplement functionality of a first application under development by the first application developer; and a code generation module, implemented by a second one or more processors, that provides a software development kit (SDK) library to the first application developer for incorporation into at least a first screen of the first application, wherein the first screen includes a first user interface element associated with a first entity, and wherein the SDK library includes instructions for: in response to user selection of the first user interface element, extracting text from the first screen and preparing a query wrapper including (i) the corresponding unique identifier of the first function and (ii) the extracted text; transmitting the query wrapper to a search system; receiving a result set from the search system, wherein the result set includes a plurality of items, and wherein a first item of the plurality of items includes (i) an identifier of a target application and (ii) an access mechanism for a specified screen of the target application; displaying the plurality of items; and in response to user selection of the first item, actuating the access mechanism to open the target application to the specified screen. 